在PHP中进行3DES的加密和解密

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

拓展阅读:

PHP中的mcrypt库拓展官方文档

维基百科:3DES (Triple DES)概述与原理

3 个评论 »
  1. fifsky fifsky
    March 9, 2010, 12:23 am

    有点误人子弟了,上面加密过后的字符串根本就没有意义,无非就是将明文$plaintext进行了bin2hex,只要别人知道密文来一个pack('H*', $plaintext);不就得到了明文了

  2. fifsky fifsky
    March 9, 2010, 12:24 am

    return pack('H*', $plaintext);

  3. fifsky fifsky
    March 9, 2010, 12:24 am

    加密并不是bin2hex就OK了,那样的话直接pack不就得到明文了

回应此文

你也可以选择引用此文章.