摘要:使用原因因?yàn)樵陧?xiàng)目中,需要在與客戶端交互的時(shí)候,保存一些私有信息,不被別人看到,所以,使用了比較流行的可以反向加解密的。
使用原因:
因?yàn)樵陧?xiàng)目中,需要在與客戶端(IOS,Android)交互的時(shí)候,保存一些私有信息,不被別人看到,所以,使用了比較流行的可以反向加解密的AES。
PHP 源碼aes128cbcEncrypt("11122222"); echo " "; echo $aes->aes128cbcEncrypt("中文aes演示"); echo " "; class aes{ const KEY="625202f9149e061d"; const IV ="5efd3f6060e20330"; /** * pkcs7補(bǔ)碼 * @param string $string 明文 * @param int $blocksize Blocksize , 以 byte 為單位 * @return String */ private function addPkcs7Padding($string, $blocksize = 32) { $len = strlen($string); //取得字符串長(zhǎng)度 $pad = $blocksize - ($len % $blocksize); //取得補(bǔ)碼的長(zhǎng)度 $string .= str_repeat(chr($pad), $pad); //用ASCII碼為補(bǔ)碼長(zhǎng)度的字符, 補(bǔ)足最后一段 return $string; } /** * 加密然后base64轉(zhuǎn)碼 * * @param String 明文 * @param 加密的初始向量(IV的長(zhǎng)度必須和Blocksize一樣, 且加密和解密一定要用相同的IV) * @param $key 密鑰 */ function aes256cbcEncrypt($str, $iv, $key ) { return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $this->addPkcs7Padding($str) , MCRYPT_MODE_CBC, $iv)); } /** * 除去pkcs7 padding * * @param String 解密后的結(jié)果 * * @return String */ private function stripPkcs7Padding($string){ $slast = ord(substr($string, -1)); $slastc = chr($slast); $pcheck = substr($string, -$slast); if(preg_match("/$slastc{".$slast."}/", $string)){ $string = substr($string, 0, strlen($string)-$slast); return $string; } else { return false; } } /** * 解密 * * @param String $encryptedText 二進(jìn)制的密文 * @param String $iv 加密時(shí)候的IV * @param String $key 密鑰 * @return String */ function aes256cbcDecrypt($encryptedText, $iv, $key) { $encryptedText =base64_decode($encryptedText); return $this->stripPkcs7Padding(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encryptedText, MCRYPT_MODE_CBC, $iv)); } function aes128cbcDecrypt($encryptedText, $iv=self::IV, $key=self::KEY) { $encryptedText =base64_decode($encryptedText); return $this->stripPkcs7Padding(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encryptedText, MCRYPT_MODE_CBC, $iv)); } function hexToStr($hex)//十六進(jìn)制轉(zhuǎn)字符串 { $string=""; for($i=0;$i運(yùn)行結(jié)果 在線驗(yàn)證加解密結(jié)果hexToStr($encryptedText); return $this->stripPkcs7Padding(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_CBC, $iv)); } function aes128cbcEncrypt($str, $iv=self::IV, $key=self::KEY ) { // $this->addPkcs7Padding($str,16) $base = (mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,$this->addPkcs7Padding($str,16) , MCRYPT_MODE_CBC, $iv)); return $this->strToHex($base); } }
驗(yàn)證地址
http://www.seacha.com/tools/aes.html
@implementation NSString (AES256) -(NSString *) aes256_encrypt:(NSString *)key { const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding]; NSData *data = [NSData dataWithBytes:cstr length:self.length]; //對(duì)數(shù)據(jù)進(jìn)行加密 NSData *result = [data aes256_encrypt:key]; //轉(zhuǎn)換為2進(jìn)制字符串 if (result && result.length > 0) { Byte *datas = (Byte*)[result bytes]; NSMutableString *output = [NSMutableString stringWithCapacity:result.length * 2]; for(int i = 0; i < result.length; i++){ [output appendFormat:@"%02x", datas[i]]; } return output; } return nil; } -(NSString *) aes256_decrypt:(NSString *)key { //轉(zhuǎn)換為2進(jìn)制Data NSMutableData *data = [NSMutableData dataWithCapacity:self.length / 2]; unsigned char whole_byte; char byte_chars[3] = {"