DES 加密 解密 iOS Android PHP
PHP代码 和 iOS 代码 摘自 http://blog.toright.com/posts/2657/ios-objective-c-與-php-des-加解密演算法實作.html
三个平台共用 一个密匙,尽量为8的倍数
1.php代码
<?php /** * PHP DES 加密程式 * * @param $key 密鑰(八個字元內) * @param $encrypt 要加密的明文 * @return string 密文 */ function encrypt ($key, $encrypt) { // 根據 PKCS#7 RFC 5652 Cryptographic Message Syntax (CMS) 修正 Message 加入 Padding $block = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_ECB); $pad = $block - (strlen($encrypt) % $block); $encrypt .= str_repeat(chr($pad), $pad); // 不需要設定 IV 進行加密 $passcrypt = mcrypt_encrypt(MCRYPT_DES, $key, $encrypt, MCRYPT_MODE_ECB); return base64_encode($passcrypt); } /** * PHP DES 解密程式 * * @param $key 密鑰(八個字元內) * @param $decrypt 要解密的密文 * @return string 明文 */ function decrypt ($key, $decrypt) { // 不需要設定 IV $str = mcrypt_decrypt(MCRYPT_DES, $key, base64_decode($decrypt), MCRYPT_MODE_ECB); // 根據 PKCS#7 RFC 5652 Cryptographic Message Syntax (CMS) 修正 Message 移除 Padding $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 . " "; echo "encrypt = " . $encrypt . " "; echo "decrypt = " . $decrypt . " "; ?>
+(NSString*) decryptUseDES:(NSString*)cipherText key:(NSString*)key { // 利用 GTMBase64 解碼 Base64 字串 NSData* cipherData = [cipherText base64DecodedData]; 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 = [dataTemp base64EncodedString]; }else{ // NSLog(@"DES加密失败"); } return plainText; }
3.Android 代码
// 密钥 如果 密匙不足 8个 字符 java代码 要加 <pre name="code" class="java"> //例如 secretKey = "xxxxxxx ";
public class Des4 { // 密钥 private final static String secretKey = ""; private static byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0}; public static String encode(String plainText) throws Exception { IvParameterSpec zeroIv = new IvParameterSpec(iv); SecretKeySpec key = new SecretKeySpec(secretKey.getBytes(), "DES"); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv); byte[] encryptedData = cipher.doFinal(plainText.getBytes()); return Base64.encodeToString(encryptedData, 1); } public static String decode(String encryptText) throws Exception { IvParameterSpec zeroIv = new IvParameterSpec(iv); SecretKeySpec key = new SecretKeySpec(secretKey.getBytes(), "DES"); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.DECRYPT_MODE, key, zeroIv); byte[] decryptData = cipher.doFinal(Base64.decode(encryptText, 1)); return new String(decryptData); } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: PHP中DES加密解密实例代码
- 下一篇: PHP使用DES进行加密和解密