iOS中用到的3DES密码算法

转载 2016年08月29日 09:52:37

加密需要后台与前端统一,使用3DES加密算法:

[objc] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. //  
  2. //  NSString+ThreeDES.m  
  3. //  3DE  
  4. //  
  5. //  Created by Brandon Zhu on 31/10/2012.  
  6. //  Copyright (c) 2012 Brandon Zhu. All rights reserved.  
  7. //  
  8.   
  9. #import "NSString+ThreeDES.h"  
  10. #import <CommonCrypto/CommonCryptor.h>  
  11. #import <CommonCrypto/CommonDigest.h>  
  12. #import "GTMBase64.h"  
  13.   
  14. // 前端与后台商量KEY  
  15. #define gkey @""  
  16. #define gIv  @""  
  17. #define kSecrectKeyLength 24  
  18.   
  19. @implementation NSString (ThreeDES)  
  20.   
  21. + (NSString*)encrypt:(NSString*)plainText withKey:(NSString*)key{  
  22.     const charchar *cstr = [key cStringUsingEncoding:NSUTF8StringEncoding];  
  23.     NSData *keyData = [NSData dataWithBytes:cstr length:key.length];  
  24.       
  25.     uint8_t digest[CC_SHA1_DIGEST_LENGTH];  
  26.       
  27.     CC_SHA1(keyData.bytes, (CC_LONG)keyData.length, digest);  
  28.       
  29.     uint8_t keyByte[kSecrectKeyLength];  
  30.     for (int i=0; i<16; i++) {  
  31.         keyByte[i] = digest[i];  
  32.     }  
  33.     for (int i=0; i<8; i++) {  
  34.         keyByte[16+i] = digest[i];  
  35.     }  
  36.       
  37.     NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding];  
  38.     size_t plainTextBufferSize = [data length];  
  39.     const voidvoid *vplainText = (const voidvoid *)[data bytes];  
  40.       
  41.     CCCryptorStatus ccStatus;  
  42.     uint8_t *bufferPtr = NULL;  
  43.     size_t bufferPtrSize = 0;  
  44.     size_t movedBytes = 0;  
  45.       
  46.     bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);  
  47.     bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));  
  48.     memset((voidvoid *)bufferPtr, 0x0, bufferPtrSize);  
  49.       
  50.     const voidvoid *vkey = (const voidvoid *) keyByte;  
  51.     const voidvoid *vinitVec = (const voidvoid *) [gIv UTF8String];  
  52.       
  53.     ccStatus = CCCrypt(kCCEncrypt,  
  54.                        kCCAlgorithm3DES,  
  55.                        kCCOptionPKCS7Padding,  
  56.                        vkey,  
  57.                        kCCKeySize3DES,  
  58.                        vinitVec,  
  59.                        vplainText,  
  60.                        plainTextBufferSize,  
  61.                        (voidvoid *)bufferPtr,  
  62.                        bufferPtrSize,  
  63.                        &movedBytes);  
  64.       
  65.     NSData *myData = [NSData dataWithBytes:(const voidvoid *)bufferPtr length:(NSUInteger)movedBytes];  
  66.     NSString *result = [GTMBase64 stringByEncodingData:myData];  
  67.     return result;  
  68. }  
  69.   
  70. + (NSString*)decrypt:(NSString*)encryptText withKey:(NSString*)key{  
  71.       
  72.     const charchar *cstr = [key cStringUsingEncoding:NSUTF8StringEncoding];  
  73.     NSData *data = [NSData dataWithBytes:cstr length:key.length];  
  74.       
  75.     uint8_t digest[CC_SHA1_DIGEST_LENGTH];  
  76.       
  77.     CC_SHA1(data.bytes, (CC_LONG)data.length, digest);  
  78.       
  79.     uint8_t keyByte[kSecrectKeyLength];  
  80.     for (int i=0; i<16; i++) {  
  81.         keyByte[i] = digest[i];  
  82.     }  
  83.     for (int i=0; i<8; i++) {  
  84.         keyByte[16+i] = digest[i];  
  85.     }  
  86.       
  87.     NSData *encryptData = [GTMBase64 decodeData:[encryptText dataUsingEncoding:NSUTF8StringEncoding]];  
  88.     size_t plainTextBufferSize = [encryptData length];  
  89.     const voidvoid *vplainText = [encryptData bytes];  
  90.       
  91.     CCCryptorStatus ccStatus;  
  92.     uint8_t *bufferPtr = NULL;  
  93.     size_t bufferPtrSize = 0;  
  94.     size_t movedBytes = 0;  
  95.       
  96.     bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);  
  97.     bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));  
  98.     memset((voidvoid *)bufferPtr, 0x0, bufferPtrSize);  
  99.       
  100.     const voidvoid *vkey = (const voidvoid *) keyByte;  
  101.     const voidvoid *vinitVec = (const voidvoid *) [gIv UTF8String];  
  102.       
  103.     ccStatus = CCCrypt(kCCDecrypt,  
  104.                        kCCAlgorithm3DES,  
  105.                        kCCOptionPKCS7Padding,  
  106.                        vkey,  
  107.                        kCCKeySize3DES,  
  108.                        vinitVec,  
  109.                        vplainText,  
  110.                        plainTextBufferSize,  
  111.                        (voidvoid *)bufferPtr,  
  112.                        bufferPtrSize,  
  113.                        &movedBytes);  
  114.       
  115.     NSString *result = [[[NSString alloc] initWithData:[NSData dataWithBytes:(const voidvoid *)bufferPtr  
  116.                                                                       length:(NSUInteger)movedBytes] encoding:NSUTF8StringEncoding] autorelease];  
  117.     return result;  
  118. }  
  119. - (NSString*) sha1  
  120. {  
  121.     const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];  
  122.     NSData *data = [NSData dataWithBytes:cstr length:self.length];  
  123.       
  124.     uint8_t digest[CC_SHA1_DIGEST_LENGTH];  
  125.       
  126.     CC_SHA1(data.bytes, data.length, digest);  
  127.     NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];  
  128.       
  129.     for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)  
  130.         [output appendFormat:@"%02x", digest[i]];  
  131.       
  132.     return output;  
  133. }  
  134.   
  135. @end  

iOS中用到的3DES密码算法

加密需要后台与前端统一,使用3DES加密算法:
  • woaifen3344
  • woaifen3344
  • 2014年10月21日 11:22
  • 8749

iOS-OC-3DES加密和解密

+ (NSString*)TripleDES:(NSString*)plainText encryptOrDecrypt:(CCOperation)encryptOrDecrypt { con...
  • u014220518
  • u014220518
  • 2016年05月24日 12:11
  • 1903

iOS 3DES加密 和 java 3DES 解密

对称加密算法 3des 在iOS 客户端加密算法 首先进入头文件: #import   #import #import -(NSString*)TripleDES:(NSS...
  • jinglijun
  • jinglijun
  • 2013年01月08日 20:00
  • 16204

iOS加解密源码(3DES)

  • 2015年07月01日 18:43
  • 25KB
  • 下载

iOS开发 OC与java相对应的3DES加解密

移动开发中遇到的最让人纠结的要属Java、Android和iPhone三个平台加解密不一致的问题。因为手机端后台通常是用JAVA开发的Web Service,Android和iPhone客户端调用同样...
  • GorLong
  • GorLong
  • 2017年04月20日 10:47
  • 859

iOS中3DES加密算法的原理

要理解3DES,就必须先搞懂什么是DES。DES是美国一种由来已久的加密标准,它的工作原理是将数据按照8个字节一段进行加密或解密,从而得到一段8个字节的密文或者明文。之后按照顺序将计算所得的数据连在一...
  • ios_xumin
  • ios_xumin
  • 2015年12月21日 14:16
  • 733

Java加密算法---3DES

import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec...
  • wangshuang1631
  • wangshuang1631
  • 2016年09月21日 17:39
  • 1565

密码算法体制

密码算法体制包括: 1对称密钥算法 2非对称密钥算法 3数字摘要哈希 对称密钥算法 特点:加密key=解密key 常见的对称加密算法:DES 56bit      3DES 168...
  • baidu_36649389
  • baidu_36649389
  • 2016年12月09日 16:47
  • 648

3DES加密算法简析

3DES加密算法并非什么新的加密算法,而是DES算法的另一种模式。是现在比较常用的一种对称加密算法,比起DES来说安全性更高。该算法的加解密过程分别是对明文/密文数据进行三次DES加密或解密,得到相应...
  • jimi_yuan
  • jimi_yuan
  • 2016年01月26日 22:51
  • 4078

如何实现DES/3DES算法

 如何实现DES/3DES算法原文:Matthew Fischer翻译:小榕软件实验室 这篇文档是我从小榕实验室下载的,为了保证原文的完整性,如果有影响原文内容的改动,我会把我写的用中扣号扣起来,即,...
  • zixu
  • zixu
  • 2006年09月10日 17:51
  • 7949
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS中用到的3DES密码算法
举报原因:
原因补充:

(最多只允许输入30个字)