变更记录
方案名称
数据加密 - DES 加密(包含PHP服务器端解密)
关键字
数据加密 \ 加密 \ 解密 \ DES
需求场景
- 移动端与服务器敏感数据通讯
- 移动端本地部分需要保存的敏感数据(NSUserDefaults、文件或数据库)
参考链接
- iOS Objective-C 與 PHP DES 加解密演算法實作
详细内容
#####1. 首先进入头文件,添加必要的 Framework
1
| #import <CommonCrypto/CommonCryptor.h>
|
#####2. iOS 端实现代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| //解密 -(NSString*) decryptUseDES:(NSString*)cipherText key:(NSString*)key { // 利用 GTMBase64 解碼 Base64 字串 NSData* cipherData = [GTMBase64 decodeString:cipherText]; unsigned char buffer[1024]; memset(buffer, 0, sizeof(char)); size_t numBytesDecrypted = 0;
// IV 偏移量不需使用 CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding | kCCOptionECBMode, [key UTF8String], kCCKeySizeDES, nil, [cipherData bytes], [cipherData length], buffer, 1024, &numBytesDecrypted); NSString* plainText = nil; if (cryptStatus == kCCSuccess) { NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted]; plainText = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; } return plainText; }
//加密 -(NSString *) encryptUseDES:(NSString *)clearText key:(NSString *)key { NSData *data = [clearText dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; unsigned char buffer[1024]; memset(buffer, 0, sizeof(char)); size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding | kCCOptionECBMode, [key UTF8String], kCCKeySizeDES, nil, [data bytes], [data length], buffer, 1024, &numBytesEncrypted);
NSString* plainText = nil; if (cryptStatus == kCCSuccess) { NSData *dataTemp = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted]; plainText = [GTMBase64 stringByEncodingData:dataTemp]; }else{ NSLog(@"DES加密失败"); } return plainText; }
|
#####3. PHP 端 DES 解密和加密算法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| <?php
function encrypt ($key, $encrypt) { $block = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_ECB); $pad = $block - (strlen($encrypt) % $block); $encrypt .= str_repeat(chr($pad), $pad);
$passcrypt = mcrypt_encrypt(MCRYPT_DES, $key, $encrypt, MCRYPT_MODE_ECB); return base64_encode($passcrypt); }
function decrypt ($key, $decrypt) { $str = mcrypt_decrypt(MCRYPT_DES, $key, base64_decode($decrypt), MCRYPT_MODE_ECB);
$pad = ord($str[strlen($str) - 1]); return substr($str, 0, strlen($str) - $pad); }
$key = 'skey'; $plain = '0123ABCD!@#$中文'; $encrypt = encrypt($key, $plain); $decrypt = decrypt($key, $encrypt);
echo 'plain = ' . $plain . "\n"; echo 'encrypt = ' . $encrypt . "\n"; echo 'decrypt = ' . $decrypt . "\n"; ?>
|
效果图
(无)
备注
(无)