iOS、后台、Android 三个一致的加密工具 ---------DES加密

来源:互联网 发布:域名dns劫持 编辑:程序博客网 时间:2024/05/22 15:36


首先是JAVA端的加密工具类,它同样适用于Android端,无需任何修改,即可保证Java与Android端的加解密一致,并且中文不会乱码。我经过和IOS共同测试,是没有问题的大笑

iOS端  代码       iOS端的加密工具类中引入了“GTMBase64.h”,下面 我写的demo里面 有该类。。

#import @interface DES3Util : NSObject {}// 加密方法+ (NSString*)encrypt:(NSString*)plainText;// 解密方法+ (NSString*)decrypt:(NSString*)encryptText;@end
#import"DES3Util.h"#import#import"GTMBase64.h"#define gkey@"Mozhe@lx100$#365#$"#define gIv@"01234567"@implementationDES3Util//加密方法+ (NSString*)encrypt:(NSString*)plainText {NSData* data = [plainTextdataUsingEncoding:NSUTF8StringEncoding];size_tplainTextBufferSize = [datalength];constvoid*vplainText = (constvoid*)[databytes];CCCryptorStatusccStatus;uint8_t*bufferPtr =NULL;size_tbufferPtrSize =0;size_tmovedBytes =0;bufferPtrSize = (plainTextBufferSize +kCCBlockSize3DES) & ~(kCCBlockSize3DES-1);bufferPtr =malloc( bufferPtrSize *sizeof(uint8_t));memset((void*)bufferPtr,0x0, bufferPtrSize);constvoid*vkey = (constvoid*) [gkeyUTF8String];constvoid*vinitVec = (constvoid*) [gIvUTF8String];ccStatus =CCCrypt(kCCEncrypt,kCCAlgorithm3DES,kCCOptionPKCS7Padding,vkey,kCCKeySize3DES,vinitVec,vplainText,plainTextBufferSize,(void*)bufferPtr,bufferPtrSize,&movedBytes);NSData*myData = [NSDatadataWithBytes:(constvoid*)bufferPtrlength:(NSUInteger)movedBytes];NSString*result = [GTMBase64stringByEncodingData:myData];returnresult;}//解密方法+ (NSString*)decrypt:(NSString*)encryptText {NSData*encryptData = [GTMBase64decodeData:[encryptTextdataUsingEncoding:NSUTF8StringEncoding]];size_tplainTextBufferSize = [encryptDatalength];constvoid*vplainText = [encryptDatabytes];CCCryptorStatusccStatus;uint8_t*bufferPtr =NULL;size_tbufferPtrSize =0;size_tmovedBytes =0;bufferPtrSize = (plainTextBufferSize +kCCBlockSize3DES) & ~(kCCBlockSize3DES-1);bufferPtr =malloc( bufferPtrSize *sizeof(uint8_t));memset((void*)bufferPtr,0x0, bufferPtrSize);constvoid*vkey = (constvoid*) [gkeyUTF8String];constvoid*vinitVec = (constvoid*) [gIvUTF8String];ccStatus =CCCrypt(kCCDecrypt,kCCAlgorithm3DES,kCCOptionPKCS7Padding,vkey,kCCKeySize3DES,vinitVec,vplainText,plainTextBufferSize,(void*)bufferPtr,bufferPtrSize,&movedBytes);NSString*result = [[NSStringalloc]initWithData:[NSDatadataWithBytes:(constvoid*)bufferPtrlength:(NSUInteger)movedBytes]encoding:NSUTF8StringEncoding];returnresult;}@end



Java端

package encrypt;import java.security.Key;import javax.crypto.Cipher;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESedeKeySpec;import javax.crypto.spec.IvParameterSpec;public class Des3 {// 密钥private final static String secretKey = "liuyunqiang@lx100$#365#$";// 向量private final static String iv = "01234567";// 加解密统一使用的编码方式private final static String encoding = "utf-8";/** *  * 3DES加密 *  * *  * @param plainText *            普通文本 *  * @return *  * @throws Exception */public static String encode(String plainText) throws Exception {Key deskey = null;DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes());SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");deskey = keyfactory.generateSecret(spec);Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding");IvParameterSpec ips = new IvParameterSpec(iv.getBytes());cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);byte[] encryptData = cipher.doFinal(plainText.getBytes(encoding));return Base64.encode(encryptData);}/** *  * 3DES解密 *  * *  * @param encryptText *            加密文本 *  * @return *  * @throws Exception */public static String decode(String encryptText) throws Exception {Key deskey = null;DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes());SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");deskey = keyfactory.generateSecret(spec);Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding");IvParameterSpec ips = new IvParameterSpec(iv.getBytes());cipher.init(Cipher.DECRYPT_MODE, deskey, ips);byte[] decryptData = cipher.doFinal(Base642.decode(encryptText));return new String(decryptData, encoding);}public static void main(String[] args) throws Exception {String tt="测试";System.out.println(encode(tt));System.out.println(decode(encode(tt)));}}

上面的加密工具类会使用到Base64这个类,该类的源代码如下:

package encrypt;public class Base64 {private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();public static String encode(byte[] data) {int start = 0;int len = data.length;StringBuffer buf = new StringBuffer(data.length * 3 / 2);int end = len - 3;int i = start;int n = 0;while (i <= end) {int d = ((((int) data[i]) & 0x0ff) << 16)| ((((int) data[i + 1]) & 0x0ff) << 8)| (((int) data[i + 2]) & 0x0ff);buf.append(legalChars[(d >> 18) & 63]);buf.append(legalChars[(d >> 12) & 63]);buf.append(legalChars[(d >> 6) & 63]);buf.append(legalChars[d & 63]);i += 3;if (n++ >= 14) {n = 0;buf.append(" ");}}if (i == start + len - 2) {int d = ((((int) data[i]) & 0x0ff) << 16)| ((((int) data[i + 1]) & 255) << 8);buf.append(legalChars[(d >> 18) & 63]);buf.append(legalChars[(d >> 12) & 63]);buf.append(legalChars[(d >> 6) & 63]);buf.append("=");} else if (i == start + len - 1) {int d = (((int) data[i]) & 0x0ff) << 16;buf.append(legalChars[(d >> 18) & 63]);buf.append(legalChars[(d >> 12) & 63]);buf.append("==");}return buf.toString();}}

#import@interfaceDES3Util :NSObject//加密方法+ (NSString*)encrypt:(NSString*)plainText;//解密方法+ (NSString*)decrypt:(NSString*)encryptText;@end#import@interfaceDES3Util :NSObject//加密方法+ (NSString*)encrypt:(NSString*)plainText;//解密方法+ (NSString*)decrypt:(NSString*)encryptText;@end
作者:默着链接:http://www.jianshu.com/p/630e5899582d來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
阅读全文
0 0
原创粉丝点击