对称加密算法 3des 在iOS 客户端加密算法

首先进入头文件:

#import

#import

#import

-(NSString*)TripleDES:(NSString*)plainText encryptOrDecrypt:(CCOperation)encryptOrDecrypt

{

const void *vplainText;

size_t plainTextBufferSize;

if (encryptOrDecrypt == kCCDecrypt)//解密

{

NSData *EncryptData = [GTMBase64 decodeData:[plainText dataUsingEncoding:NSUTF8StringEncoding]];

plainTextBufferSize = [EncryptData length];

vplainText = [EncryptData bytes];

}

else //加密

{

NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding];

plainTextBufferSize = [data length];

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);

// memset((void *) iv, 0x0, (size_t) sizeof(iv));

const void *vkey = (const void *)[DESKEY UTF8String];

// NSString *initVec = @"init Vec";

//const void *vinitVec = (const void *) [initVec UTF8String];

// Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};

ccStatus = CCCrypt(encryptOrDecrypt,

kCCAlgorithm3DES,

kCCOptionPKCS7Padding | kCCOptionECBMode,

vkey,

kCCKeySize3DES,

nil,

vplainText,

plainTextBufferSize,

(void *)bufferPtr,

bufferPtrSize,

&movedBytes);

//if (ccStatus == kCCSuccess) NSLog(@"SUCCESS");

/*else if (ccStatus == kCC ParamError) return @"PARAM ERROR";

else if (ccStatus == kCCBufferTooSmall) return @"BUFFER TOO SMALL";

else if (ccStatus == kCCMemoryFailure) return @"MEMORY FAILURE";

else if (ccStatus == kCCAlignmentError) return @"ALIGNMENT";

else if (ccStatus == kCCDecodeError) return @"DECODE ERROR";

else if (ccStatus == kCCUnimplemented) return @"UNIMPLEMENTED"; */

NSString *result;

if (encryptOrDecrypt == kCCDecrypt)

{

result = [[[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtr

length:(NSUInteger)movedBytes]

encoding:NSUTF8StringEncoding]

autorelease];

}

else

{

NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];

result = [GTMBase64 stringByEncodingData:myData];

}

return result;

}

上面还有个DESKEY宏定义是

#define kChosenDigestLengthCC_SHA1_DIGEST_LENGTH

#define DESKEY @"D6D2402F1C98E208FF2E863AA29334BD65AE1932A821502D9E5673CDE3C713ACFE53E2103CD40ED6BEBB101B484CAE83D537806C6CB611AEE86ED2CA8C97BBE95CF8476066D419E8E833376B850172107844D394016715B2E47E0A6EECB3E83A361FA75FA44693F90D38C6F62029FCD8EA395ED868F9D718293E9C0E63194E87"

java客户端 3DES 解密和加密算法

public static String encryptThreeDESECB(String src,String key) throws Exception

{

DESedeKeySpec dks = new DESedeKeySpec(key.getBytes("UTF-8"));

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");

SecretKey securekey = keyFactory.generateSecret(dks);

Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");

cipher.init(Cipher.ENCRYPT_MODE, securekey);

byte[] b=cipher.doFinal(src.getBytes());

BASE64Encoder encoder = new BASE64Encoder();

return encoder.encode(b).replaceAll("\r", "").replaceAll("\n", "");

}

//3DESECB解密,key必须是长度大于等于 3*8 = 24 位

public static String decryptThreeDESECB(String src,String key) throws Exception

{

//--通过base64,将字符串转成byte数组

BASE64Decoder decoder = new BASE64Decoder();

byte[] bytesrc = decoder.decodeBuffer(src);

//--解密的key

DESedeKeySpec dks = new DESedeKeySpec(key.getBytes("UTF-8"));

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");

SecretKey securekey = keyFactory.generateSecret(dks);

//--Chipher对象解密

Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE, securekey);

byte[] retByte = cipher.doFinal(bytesrc);

return new String(retByte);

} 亲自测试方法都ok!

java ios 3des加密,iOS 3DES加密 和 java 3DES 解密相关推荐

  1. 3、【java数据安全】对称加密的5种(DES/3DES、AES、IDEA、PBE)常见算法的使用示例

    java数据安全 系列文章 1.[java数据安全]数据安全之加密解密(base64.MD.SHA.DES.AES.IDEA.PBE.DH.RSA.EIGamal).数字签名(DSA.ECDSA)和数 ...

  2. iOS:DES加密iOS和Android的匹配

    android端的加密代码: public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";private s ...

  3. ios开发Base64编码以及加密相关学习

    一:.Base64补充 ```objc 1.Base64简单说明 描述:Base64可以成为密码学的基石,非常重要. 特点:可以将任意的二进制数据进行Base64编码 结果:所有的数据都能被编码为并只 ...

  4. iOS应用安全风险及加密解决措施

           作为最受开发者欢迎的两种系统,安卓系统和苹果iOS系统一直备受关注,对于两种系统的对比,尤其是安全iOS应用安全方面的对比,这几年来一直都争论不休.安卓的开放性使其具有普及性的同时也伴随 ...

  5. python 3des加密_DES/3DES之ECB模式和CBC模式加解密 及 Python 实现

    概念说明 DES:Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法. 3DES:Triple DES,是三重数据加密算法(TDEA,Triple Data ...

  6. [022] Android、iPhone和Java三个平台一致的加密工具

    先前一直在做安卓,最近要开发iPhone客户端,这其中遇到的最让人纠结的要属Java.Android和iPhone三个平台加解密不一致的问题.因为手机端后台通常是用JAVA开发的Web Service ...

  7. java pkcs8格式的私钥_RSA加密解密中pkcs1与pkcs8格式私钥互相转换

    net,ios中rsa加解密使用的是pkcs1,而java使用的是pkcs8 如果是按1024取模(通常都是1024),pkcs1格式的私钥长度应该是812.如果是pkcs8的格式的密钥长度为861. ...

  8. java对称加密与非对称加密

    java对称加密与非对称加密 加密方式大致分为两种,对称加密和非对称加密.对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secre ...

  9. RSA非对称加密(以Android和java为例)

    一.概念 1.1目的 由于工作中用到了趟过了许多的坑所以深有体会,所以想写个笔记怕以后忘记了,好到时候回来看看. 首先是一定要知道最基础的概念,一定要知道最基础的概念,一定要知道最基础的概念,以免被误 ...

最新文章

  1. 关于分布式系统的数据一致性问题(一)
  2. linux 将test.log中第1行的所有都替换成,【Linux面试题7】三剑客笔试题集合
  3. 100条常用写作谚语(1)(2)(3)(4)
  4. DHCP服务器如何检测穿过中继代理的IP地址冲突(gratuitous ARP肯定是不行的)
  5. Android适配之百分比的简单用法
  6. android手机主流屏幕大小,如何选择适合自己的手机屏幕大小 屏幕大小选择标准【详解】...
  7. 数字钟Matlab仿真,简单数字钟仿真电路图大全(五款数字钟仿真电路图) - 全文...
  8. 使用MQTTlens和Mosquitto在WIN7上完成发布和订阅
  9. Qcon演讲纪实:详解如何在实时视频通话中实现AR功能
  10. Python骚操作 | 川普的嘴,骗人的鬼!
  11. coco2d-html5制作弹弓射鸟第一部分---橡皮筋
  12. java哪一个可以编译,下列Java命令中,哪一个可以编译HelloWorld.java文件( )
  13. 2017免费发布信息平台排行大全!
  14. 安卓期末大作业——单词本APP(源码+任务书)
  15. 2023最新计算机毕业设计题目汇总大全
  16. MInd+实例4——公园人数计数系统
  17. js实现京东购物放大镜和选项卡效果
  18. java中的对象是什么_Java中的对象是什么以及如何使用它?
  19. 东汉末年的事态格局的变迁原因即三国各个厉害角色的性格中的底层原因分析
  20. Unity3D-实战-01坦克大战-day03箱式对撞机、钢体、2D渲染层级问题、重力问题(出现坠落现象)、旋转问题、左右上下冲突问题、抖动问题

热门文章

  1. 理清offsetparent()、offsetLeft/offsetTop、offset()、position()
  2. Django--基于Python的Web应用框架
  3. LeetCode常用算法的总结
  4. Vue 判断页面内图片是否渲染完成
  5. oracle巡检表,ORACLE日常巡检内容
  6. 计算机四级——网络工程 易错点总结
  7. 现在好的测试缺陷管理工具都有哪些啊?
  8. LeetCode 253. 会议室 II**(double)
  9. 趣图:程序员的真实写照!这也太形象了吧!
  10. 什么是案例管理模型和符号(CMMN)