我正在尝试计算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关键0123456789ABCDEF
是D5D44FF720683D0D
)。
编辑:在您的情况下,您需要将前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] 删除。
我来说两句