如何为3des加密密钥计算正确的KCV值?

塞扎里

我正在尝试计算DES加密的KCV。

$data = 'F337CE3C64E02D96C61A9EC69E051D5A';
$transport = '4B4D3733504D3735';
$encData = bin2hex(mcrypt_encrypt(MCRYPT_DES, pack('H*', $transport),         
$data, MCRYPT_MODE_ECB));

很好,数据已正确加密。

现在我要计算KCV。

$key = 'F337CE3C64E02D96C61A9EC69E051D5A';
$zeroBytes = 00000000;
$kcv = bin2hex(mcrypt_encrypt(MCRYPT_3DES, $key, $zeroBytes, MCRYPT_MODE_ECB));
var_dump($kcv);

这将返回错误的值:953f34d098f996f9,它应该是(最终kcv)53173F。这里出什么问题了?

鄂尔多斯语

我看到您的代码有两个问题:1.密钥应为二进制,2.应使用空字节,而不是整数零。

$key = pack('H*', '0123456789ABCDEF');
$data = "\0\0\0\0\0\0\0\0";

$kcv = strtoupper(bin2hex(mcrypt_encrypt(MCRYPT_3DES, $key, $data, MCRYPT_MODE_ECB)));
var_dump($kcv);

此输出D5D44FF720683D0D为预期的(KCV关键0123456789ABCDEFD5D44FF720683D0D)。

编辑:在您的情况下,您需要将前16个字符附加到密钥的末尾以获取正确的KCV:

$key = 'F337CE3C64E02D96C61A9EC69E051D5A';
$key .= substr($key, 0, 16);
$key = pack('H*', $key);

$data = "\0\0\0\0\0\0\0\0";

$kcv = strtoupper(bin2hex(mcrypt_encrypt(MCRYPT_3DES, $key, $data, MCRYPT_MODE_ECB)));
var_dump($kcv);

这输出53173F8B139F34FE有关更多详细信息,请参见抠像选项

该标准定义了三个键控选项:

  • 键控选项1:所有三个键都是独立的。
  • 键控选项2:K1和K2是独立的,并且K3 = K1。
  • 键控选项3:所有三个键都相同,即K1 = K2 = K3。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何为3des加密密钥计算正确的KCV值?

来自分类Dev

用DES密钥计算KCV

来自分类Dev

DES加密密钥

来自分类Dev

计算机如何轻松生成加密密钥?

来自分类Dev

如何知道接收方的AES加密密钥是正确的?

来自分类Dev

如何存储加密密钥?

来自分类Dev

如何保护加密密钥

来自分类Dev

3DES PHP加密未正确解密

来自分类Dev

如何使用加密密钥加密消息

来自分类Dev

加密密钥计算器

来自分类Dev

如何导出对称加密密钥?

来自分类Dev

如何设置默认的GPG加密密钥?

来自分类Dev

PHP中的16字节密钥的3DES CBC加密

来自分类Dev

如何正确地创建和访问Java中的KeyStore来存储加密密钥?

来自分类Dev

了解加密密钥

来自分类Dev

3des文件Java加密/解密

来自分类Dev

OpenSSL 3DES加密参数

来自分类Dev

无法使用HMAC在Ruby中生成正确的加密密钥

来自分类Dev

加密密钥的二进制值

来自分类Dev

传递 CryptoJS AES 加密密钥的静态值是否安全?

来自分类Dev

如何不将HDD加密密钥存储在计算机上,但仍挂载在引导程序上?

来自分类Dev

如何在安全(C ++)中存储加密密钥?

来自分类Dev

如何使用加密密钥进行安全的ldap连接?

来自分类Dev

HTTPS如何避免首先窃取加密密钥?

来自分类Dev

如何告诉SED重新生成加密密钥?

来自分类Dev

如何保护app.php加密密钥?(Laravel 5)

来自分类Dev

如何在JSONStore中存储加密密钥/密码

来自分类Dev

Always Encrypted 列加密密钥是如何缓存的?

来自分类Dev

Android AES加密密钥