【问题标题】:Implementing rijndael and random encryption key in PHP在 PHP 中实现 rijndael 和随机加密密钥
【发布时间】:2014-11-05 01:57:43
【问题描述】:

我正在查看 mcrypt 文档,其中一个示例如下:

$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");

$key_size =  strlen($key);
echo "Key size: " . $key_size . "\n";

鉴于我必须分别对 AES-128、192 和 256 使用 16、24 或 32 字节密钥,使用 32 字节密钥进行 128 位加密是否是一种好习惯?如果不是,为什么?


第二个问题与每次使用随机密钥有关。这样的事情是否有可能真正解决,因为之后我将不知道使用哪个密钥来加密字符串,从而使其不可能解密?

我只是想确保它的安全性,我不太确定密钥随机性是否是一种可能的方法。

【问题讨论】:

  • 这是我的示例代码 :)

标签: php encryption cryptography rijndael


【解决方案1】:

通常当人们说 128 位加密时,那么 128 位 就是的密钥大小。由于 32 字节密钥是 256 位密钥,因此不可能将其用于 128 位加密。所以这不是好/坏的做法,这是不可能的。请注意MCRYPT_RIJNDAEL_128 中的128 指定块大小不是 密钥大小。指定 MCRYPT_RIJNDAEL_128 与仅指定 AES(具有任何密钥大小)相同。

密钥应该与随机无法区分,因此随机生成密钥当然是个好主意。当然,如果您这样做,您应该存储密钥。密钥可以存储在智能卡、USB 密钥或通过密码或其他密钥加密。密钥也有可能派生自另一个密钥、密码或密钥协商算法(例如 Diffie-Hellman)。密钥的创建、存储和销毁调用密钥管理,是整本书的主题——不能只用一段或一个答案来描述。

如果您不存储新生成的随机密钥,那么是的,您会丢失用它加密的数据。

【讨论】:

  • 我的回答有什么遗漏吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 2012-07-20
  • 2017-08-02
  • 1970-01-01
  • 2012-05-06
  • 1970-01-01
相关资源
最近更新 更多