• java/php DES/CBC/PKCS5Padding加密解密算法实现过程



    先看java代码 

    Java代码  收藏代码
    1. public static String encrypt(String message, String key) throws Exception {  
    2.         Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");  
    3.   
    4.         DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));  
    5.   
    6.         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");  
    7.         SecretKey secretKey = keyFactory.generateSecret(desKeySpec);  
    8.         IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));  
    9.         cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);  
    10.   
    11.         return toHexString(cipher.doFinal(message.getBytes("UTF-8")));  
    12.     }  
    13.   
    14. public static String decrypt(String message, String key) throws Exception {  
    15.   
    16.         byte[] bytesrc = convertHexString(message);  
    17.         Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");  
    18.         DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));  
    19.         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");  
    20.         SecretKey secretKey = keyFactory.generateSecret(desKeySpec);  
    21.         IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));  
    22.   
    23.         cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);  
    24.   
    25.         byte[] retByte = cipher.doFinal(bytesrc);  
    26.         return new String(retByte);  
    27.     }  
    28.   
    29. public static byte[] convertHexString(String ss) {  
    30.         byte digest[] = new byte[ss.length() / 2];  
    31.         for (int i = 0; i < digest.length; i++) {  
    32.             String byteString = ss.substring(2 * i, 2 * i + 2);  
    33.             int byteValue = Integer.parseInt(byteString, 16);  
    34.             digest[i] = (byte) byteValue;  
    35.         }  
    36.   
    37.         return digest;  
    38.     }  
    39.     public static String toHexString(byte b[]) {  
    40.         StringBuffer hexString = new StringBuffer();  
    41.         for (int i = 0; i < b.length; i++) {  
    42.             String plainText = Integer.toHexString(0xff & b[i]);  
    43.             if (plainText.length() < 2)  
    44.                 plainText = "0" + plainText;  
    45.             hexString.append(plainText);  
    46.         }  
    47.   
    48.         return hexString.toString();  
    49.     }  



    java写的已经很明显使用的是CBC/PKCS补码方式 

    在看PHP 

    Php代码  收藏代码
    1. function encrypt($str) {  
    2.         //加密,返回大写十六进制字符串  
    3.         $size = mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_[color=red]CBC[/color] );  
    4.         $str = $this->pkcs5Pad ( $str$size );  
    5.         return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) );  
    6.     }  
    7.   
    8.     function decrypt($str) {  
    9.         //解密    
    10.         $strBin = $this->hex2bin( strtolower$str ) );    
    11.         $str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv );  
    12.         $str = $this->pkcs5Unpad( $str );  
    13.        
    14.        
    15.        
    16.         return $str;  
    17.     }  
    18. function hex2bin($hexData) {    
    19.         $binData = "";    
    20.         for($i = 0; $i  < strlen ( $hexData ); $i += 2) {    
    21.             $binData .= chr ( hexdec ( substr ( $hexData$i, 2 ) ) );    
    22.         }  
    23.         return $binData;  
    24.     }  
    25.   
    26.     function pkcs5Pad($text$blocksize) {  
    27.         $pad = $blocksize - (strlen ( $text ) % $blocksize);  
    28.         return $text . str_repeat ( chr ( $pad ), $pad );  
    29.     }  
    30.   
    31.     function pkcs5Unpad($text) {  
    32.         $pad = ord ( $text {strlen ( $text ) - 1} );    
    33.         if ($pad > strlen ( $text )) return false;  
    34.   
    35.         if (strspn ( $textchr ( $pad ), strlen ( $text ) - $pad ) != $pad)   return false;    
    36.   
    37.         return substr ( $text, 0, - 1 * $pad );  
    38.     }  
    !!!我的新站地址点击这里,欢迎光顾!!!
  • 相关阅读:
    推荐阅读20100506
    Windows 7中使用任务计划和媒体播放器当闹钟
    推荐阅读20100517
    又遇IIS 7不能压缩js文件的问题
    推荐阅读20100523
    jQuery调用WCF服务时如何传递对象参数
    Execution permission cannot be acquired
    快乐出发
    推荐阅读20100509
    参加“全球互动娱乐专家讲坛”之“创业者与创业板”的收获
  • 原文地址:https://www.cnblogs.com/martinjinyu/p/3756754.html
Copyright © 2020-2023  润新知