3des加密Android和iOS的加密算法有时候位数是不同的。解决办法
来源:互联网 发布:海洋cms视频 编辑:程序博客网 时间:2024/05/21 11:15
http://www.iteye.com/topic/1127949
java代码:
java代码:
- package org.liuyq.des3;
- import java.security.Key;
- import javax.crypto.Cipher;
- import javax.crypto.SecretKeyFactory;
- import javax.crypto.spec.DESedeKeySpec;
- import javax.crypto.spec.IvParameterSpec;
- /**
- * 3DES加密工具类
- */
- public class Des3 {
- // 密钥
- private final static String secretKey = "双方约定的KEY";
- // 向量
- 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(Base64.decode(encryptText));
- return new String(decryptData, encoding);
- }
- }
- IOS代码:
- #import "DES3Util.h"
- #import <CommonCrypto/CommonCryptor.h>
- #import "GTMBase64.h"
- #define gkey @"双方约定的KEY"
- #define gIv @"01234567"
- @implementation DES3Util
- // 加密方法
- + (NSString*)encrypt:(NSString*)plainText {
- NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding];
- size_t plainTextBufferSize = [data length];
- const void *vplainText = (const void *)[data bytes];
- CCCryptorStatus ccStatus;
- uint8_t *bufferPtr = NULL;
- size_t bufferPtrSize = 0;
- size_t movedBytes = 0;
- bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
- bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
- memset((void *)bufferPtr, 0x0, bufferPtrSize);
- const void *vkey = (const void *) [gkey UTF8String];
- const void *vinitVec = (const void *) [gIv UTF8String];
- ccStatus = CCCrypt(kCCEncrypt,
- kCCAlgorithm3DES,
- kCCOptionPKCS7Padding,
- vkey,
- kCCKeySize3DES,
- vinitVec,
- vplainText,
- plainTextBufferSize,
- (void *)bufferPtr,
- bufferPtrSize,
- &movedBytes);
- NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
- NSString *result = [GTMBase64 stringByEncodingData:myData];
- return result;
- }
- // 解密方法
- + (NSString*)decrypt:(NSString*)encryptText {
- NSData *encryptData = [GTMBase64 decodeData:[encryptText dataUsingEncoding:NSUTF8StringEncoding]];
- size_t plainTextBufferSize = [encryptData length];
- const void *vplainText = [encryptData bytes];
- CCCryptorStatus ccStatus;
- uint8_t *bufferPtr = NULL;
- size_t bufferPtrSize = 0;
- size_t movedBytes = 0;
- bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
- bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
- memset((void *)bufferPtr, 0x0, bufferPtrSize);
- const void *vkey = (const void *) [gkey UTF8String];
- const void *vinitVec = (const void *) [gIv UTF8String];
- ccStatus = CCCrypt(kCCDecrypt,
- kCCAlgorithm3DES,
- kCCOptionPKCS7Padding,
- vkey,
- kCCKeySize3DES,
- vinitVec,
- vplainText,
- plainTextBufferSize,
- (void *)bufferPtr,
- bufferPtrSize,
- &movedBytes);
- NSString *result = [[[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtr
- length:(NSUInteger)movedBytes] encoding:NSUTF8StringEncoding] autorelease];
- return result;
- }
0 0
- 3des加密Android和iOS的加密算法有时候位数是不同的。解决办法
- 关于Android DES加密算法在不同平台加密结果不同的问题的一个解决方法
- 【Android工具类】比DES加密更安全的算法——3DES加密算法
- Android比DES加密更安全的算法——3DES加密算法
- Android比DES加密更安全的算法——3DES加密算法
- 【Android工具类】比DES加密更安全的算法——3DES加密算法
- Android比DES加密更安全的算法——3DES加密算法
- JAVA 常用的加密算法之对称加密DES、3DES和AES
- iOS:DES加密iOS和Android的匹配
- Android 中对称加密算法DES,DESede,AES的加密和解密 的工具类的使用
- iOS中3DES加密算法的原理
- 3DES 的加密算法
- des 和 3des 的base64加密
- ios的DES加密
- 3DES 和 AES 加密算法的使用
- 3DES 和 AES 加密算法的使用
- 基于Feistel网络的DES和3DES加密算法
- php、java、android、ios通用的3des加密方法
- 大神总结的App重构经验
- c——内置类型提升
- android 上传图片(压缩) Bitmap 转File
- TCP socket网线断开判断
- 持久层框架之MyBatis
- 3des加密Android和iOS的加密算法有时候位数是不同的。解决办法
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)
- 当LC_ALL等于C以后
- POJ 1013 Counterfeit Dollar 已被翻译
- 开发团队的效率
- LeetCode 5.Longest Palindromic Substring (Python)兼翻译
- 把一个List拆分为几个大小一样的List
- ssh-keygen生成git ssh密钥
- 系统故障及软件质量