我一直在研究如何使用
Laravel Encryption
Illuminate\Support\Facades\Crypt::encryptString('This is a secret message from user 1 to user 2');
以上面的例子,这是使用我的
APP_KEY
从我的
.env
文件,生成依据
php artisan key:generate
. 问题是,用户1从未获得两组密钥来通信
只有
Illuminate\Support\Facades\Crypt::decryptString
方法。
目前,我的数据库设置为有一个聊天标题。其中包含有关
他在交流。所有参与者都将使用这些密钥进行加密和解密-因此任何外部用户都无法解密消息。
public function up()
{
Schema::create('chat_headers', function(Blueprint $table) {
$table->increments('id');
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
$table->string('private_key')->unique();
$table->string('public_key')->unique();
});
}
谁
正在通信:
public function up()
{
Schema::create('chat_participants', function(Blueprint $table) {
$table->increments('id');
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
$table->integer('user_id')->unsigned();
# TODO: Build RBAC
$table->index(['user_id']);
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}
最后,我有一个消息日志表。它包含加密的消息,后跟与之相关联的聊天室。
public function up()
{
Schema::create('chat_messages', function(Blueprint $table) {
$table->increments('id');
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
$table->integer('chat_id')->unsigned();
$table->string('message');
$table->index(['chat_id']);
$table->foreign('chat_id')->references('id')->on('chat_headers')->onDelete('cascade');
});
}
如何动态地将新密钥分配给
Illuminate\Support\Facades\Crypt
用于加密聊天组之间的消息?
如果这不可能,如何使用这两个键保护聊天中参与者之间的消息?我想用
Crypt
因为这是“为了它而加密”,而不是实际上在用户之间隐藏任何内容。