字符串的三重 DES 加密到 8 字节十六进制
Triple DES Encryption of String To 8 byte hex
我必须使用 TDES 将字符串加密为 8 字节的十六进制。以下是数值(修改以供参考)
key = 636948778095358323114731
pin=1234
加密代码:
function encryptText_3des($plainText, $key) {
$key = hash("md5", $key, TRUE);
for ($x=0;$x<8;$x++) {
$key = $key.substr($key, $x, 1);
}
$padded = pkcs5_pad($plainText,mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC));
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_CBC));
return $encrypted;
}
function pkcs5_pad ($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
但是当我这样做时:
//outputs 3des encrypted data
echo encryptText_3des($data, $encryption_key);
我收到此错误:
Warning: mcrypt_encrypt(): Encryption mode requires an initialization
vector of size 8
我怎样才能得到这个值?..(我也需要它作为一个 8 字节的十六进制..)
谢谢
您错过了加密函数的初始化向量:
function encryptText_3des($plainText, $key)
{
$key = hash("md5", $key, TRUE);
for ($x = 0; $x < 8; $x++) {
$key = $key . substr($key, $x, 1);
}
$padded = pkcs5_pad($plainText,mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC));
// CBC initialization vector
$iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_CBC, $iv));
return $encrypted;
}
另外不要忘记将 $iv
字符串保存在某处(例如包含在加密字符串中),因为稍后 TDES 解密过程需要 IV 字节。
我必须使用 TDES 将字符串加密为 8 字节的十六进制。以下是数值(修改以供参考)
key = 636948778095358323114731
pin=1234
加密代码:
function encryptText_3des($plainText, $key) {
$key = hash("md5", $key, TRUE);
for ($x=0;$x<8;$x++) {
$key = $key.substr($key, $x, 1);
}
$padded = pkcs5_pad($plainText,mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC));
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_CBC));
return $encrypted;
}
function pkcs5_pad ($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
但是当我这样做时:
//outputs 3des encrypted data
echo encryptText_3des($data, $encryption_key);
我收到此错误:
Warning: mcrypt_encrypt(): Encryption mode requires an initialization
vector of size 8
我怎样才能得到这个值?..(我也需要它作为一个 8 字节的十六进制..) 谢谢
您错过了加密函数的初始化向量:
function encryptText_3des($plainText, $key)
{
$key = hash("md5", $key, TRUE);
for ($x = 0; $x < 8; $x++) {
$key = $key . substr($key, $x, 1);
}
$padded = pkcs5_pad($plainText,mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC));
// CBC initialization vector
$iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_CBC, $iv));
return $encrypted;
}
另外不要忘记将 $iv
字符串保存在某处(例如包含在加密字符串中),因为稍后 TDES 解密过程需要 IV 字节。