iOS、后台、Android 三个一致的加密工具 ---------DES加密
来源:互联网 发布:域名dns劫持 编辑:程序博客网 时间:2024/05/22 15:36
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
- iOS、后台、Android 三个一致的加密工具 ---------DES加密
- Android、iPhone和Java三个平台一致的加密工具
- Android、iPhone和Java三个平台一致的加密工具
- Android、iPhone和Java三个平台一致的加密工具
- Android、iPhone和Java三个平台一致的加密工具
- Android、iPhone和Java三个平台一致的加密工具
- Android、iPhone和Java三个平台一致的加密工具
- Android、iPhone和Java三个平台一致的加密工具
- Android、iPhone和Java三个平台一致的加密工具
- Android、iPhone和Java三个平台一致的加密工具
- Android、iPhone和Java三个平台一致的加密工具
- Android、iPhone和Java三个平台一致的加密工具
- Android、iPhone和Java三个平台一致的加密工具
- Android、iPhone和Java三个平台一致的加密工具
- 【请求加密】android ios java后台通用DES base64加密
- Android DES加密工具
- [Android实例] Android、iPhone和Java三个平台一致的加密工具
- 关于Des加密(Android与ios 与后台java服务器之间的加密解密
- springboot异常处理
- Weakness and Poorness CodeForces
- java使用Tess4j 识别图片文字
- mac下如何查看指定端口被谁占用并且杀掉该进程
- JavaWeb学习总结(十三)——使用Session防止表单重复提交
- iOS、后台、Android 三个一致的加密工具 ---------DES加密
- AS/IntelliJ Idea 部分图标含义
- java 杂谈(一)
- MyBatis+MySQL 返回插入的主键ID
- AD PCB打印1:1
- I/O error on PATCH request for "http://localhost:8081/api/users/user/1". Invalid HTTP method: PATCH
- 新手引导页(GuideView)的使用
- php validation before submit 实例 && 一些需要规避的问题
- SpringMVC自定义类型转换器