在PHP中进行3DES的加密和解密
发布于: June 3, 2009, 10:03 pm 分类: PHP/MySQL 作者: Saturn
PHP内置的mcrypt库支持多种块状加密算法,包括DES,3DES和Blowfish(默认算法)等。由于是块状加密(Block Ciper),mcrypt支持以下模式对输入字符串进行操作:CBC, OFB, CFB和ECB。
在这里,我写了一小段代码来测试PHP中的3DES加密和解密的实现过程。
以下示例所涉及到的参数如下:
- 采用ECB模式
- 192位Key (即24字节长度Key对超过Block Size的加密字符进行对应Mode操作)
- ASCII Key 字节内容:ABCDEFGHIJKLMNOPQRSTUVWX
- 需要加密字符串ASCII:www.cnSaturn.com
测试代码如下:
<?php
$cipher = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
//IV在ECB模式下失效
$iv = '12345678';
//24字节长度的Key
$key = 'ABCDEFGHIJKLMNOPQRSTUVWX';
printf("<p>192 bit key: %s</p>",bin2hex($key));
$plaintext = 'www.cnSaturn.com';
printf("<p>Plain Text: %s</p>",$plaintext);
//Triple DES 加密
if (mcrypt_generic_init($cipher, $key, $iv) != -1)
{
$cipherText = mcrypt_generic($cipher,$plaintext);
mcrypt_generic_deinit($cipher);
// 以十六进制字符显示加密后的字符
printf("<p>3DES encrypted:\n%s</p>",bin2hex($plaintext));
}
//Triple DES 解密
if (mcrypt_generic_init($cipher, $key, $iv) != -1)
{
$decrypted_data = mdecrypt_generic($cipher,$cipherText);
mcrypt_generic_deinit($cipher);
printf("<p>3DES decrypted:\n%s</p>",$decrypted_data);
}
?>
测试结果如下:
192 bit key: 4142434445464748494a4b4c4d4e4f505152535455565758 Plain Text: www.cnSaturn.com 3DES encrypted: 7777772e636e53617475726e2e636f6d 3DES decrypted: www.cnSaturn.com
拓展阅读:
3 个评论 »
March 9, 2010, 12:23 am
有点误人子弟了,上面加密过后的字符串根本就没有意义,无非就是将明文$plaintext进行了bin2hex,只要别人知道密文来一个pack('H*', $plaintext);不就得到了明文了
March 9, 2010, 12:24 am
return pack('H*', $plaintext);
March 9, 2010, 12:24 am
加密并不是bin2hex就OK了,那样的话直接pack不就得到明文了
回应此文
你也可以选择引用此文章.