3DES加密,秘钥长度为32
来源:互联网 发布:疑心暗鬼动作数据下载 编辑:程序博客网 时间:2024/06/07 05:42
首先创建一个继承于NSObject的类,
.h文件中声明两个类方法
/** 加密 **/
+ (NSString *)threeDESEncrypt:(NSString *)plainText withKey:(NSString *)key;
/** 解密 **/
+ (NSString *)threeDESDecrypt:(NSString *)plainText withKey:(NSString *)key;
然后直接将以下的代码粘贴到.m文件中即可使用
需要导入的头文件:
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCryptor.h>
#import <Security/Security.h>
+ (NSString *)threeDESEncrypt:(NSString *)plainText withKey:(NSString *)key{
/** 16进制字符串转为 data数据 **/
NSData *data = [selfhexToBytes:key];
/** 组装解密key取前16个字节然后再次取前8个字节组成key **/
uint8_t *git = (uint8_t *)[databytes];
uint8_t keyByte[24];
for (int i=0; i<16; i++) {
keyByte[i] = git[i];
}
for (int i=0; i<8; i++) {
keyByte[16+i] = git[i];
}
NSData *EncryptData = [selfhexToBytes:plainText];
size_t plainTextBufferSize = [EncryptDatalength];
constvoid *vplainText = [EncryptDatabytes];
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);
constvoid *vkey = (constvoid *) keyByte;
ccStatus =CCCrypt(kCCEncrypt,
kCCAlgorithm3DES,
kCCOptionECBMode,
vkey,
kCCKeySize3DES,
/** 偏移量直接传nil不能传@“” **/
nil,
vplainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
NSData *dataresult = [NSDatadataWithBytes:(constvoid *)bufferPtr
length:(NSUInteger)movedBytes];
NSString *result = [selfhexStringFromData:dataresult];
return [resultuppercaseString];
}
+ (NSString *)threeDESDecrypt:(NSString *)plainText withKey:(NSString *)key{
/** 16进制字符串转为 data数据 **/
NSData *data = [selfhexToBytes:key];
/** 组装解密key取前16个字节然后再次取前8个字节组成key **/
uint8_t *git = (uint8_t *)[databytes];
uint8_t keyByte[24];
for (int i=0; i<16; i++) {
keyByte[i] = git[i];
}
for (int i=0; i<8; i++) {
keyByte[16+i] = git[i];
}
NSData *EncryptData = [selfhexToBytes:plainText];
size_t plainTextBufferSize = [EncryptDatalength];
constvoid *vplainText = [EncryptDatabytes];
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);
constvoid *vkey = (constvoid *) keyByte;
ccStatus =CCCrypt(kCCDecrypt,
kCCAlgorithm3DES,
kCCOptionECBMode,
vkey,
kCCKeySize3DES,
nil,
vplainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
NSData *dataresult = [NSDatadataWithBytes:(constvoid *)bufferPtr
length:(NSUInteger)movedBytes];
NSString *result = [selfhexStringFromData:dataresult];
return [resultuppercaseString];
}
//其中用到的两个方法如下
/**
* 十六进制字符串转换为 data
* 24211D3498FF62AF --> <24211D34 98FF62AF>
*
* @param str 要转换的字符串
*
* @return 转换后的数据
*/
+(NSData*)hexToBytes:(NSString *)str{
NSMutableData* data = [NSMutableDatadata];
int idx;
for (idx =0; idx+2 <= str.length; idx+=2) {
NSRange range =NSMakeRange(idx,2);
NSString* hexStr = [strsubstringWithRange:range];
NSScanner* scanner = [NSScannerscannerWithString:hexStr];
unsignedint intValue;
[scanner scanHexInt:&intValue];
[data appendBytes:&intValuelength:1];
}
return data;
}
/**
* data 转换为十六进制字符串
* <24211D34 98FF62AF> --> 24211D3498FF62AF
*
* @param data 要转换的data
*
* @return 转换后的字符串
*/
+ (NSString *)hexStringFromData:(NSData *)data{
NSMutableString *str = [NSMutableStringstring];
Byte *byte = (Byte *)[databytes];
for (int i =0; i<[datalength]; i++) {
// byte+i为指针
[str appendString:[selfstringFromByte:*(byte+i)]];
}
return str;
}
+ (NSString *)stringFromByte:(Byte)byteVal
{
NSMutableString *str = [NSMutableStringstring];
//取高四位
Byte byte1 = byteVal>>4;
//取低四位
Byte byte2 = byteVal &0xf;
//拼接16进制字符串
[str appendFormat:@"%x",byte1];
[str appendFormat:@"%x",byte2];
return str;
}
- 3DES加密,秘钥长度为32
- 3des加密数据长度报错
- DES加密之3DES
- DES/3DES加密,解密
- iOS DES加密与3DES加密
- MD5,3DES 32位加密
- 3DES 加密解密
- 3DES加密
- 3des加密解密
- 【.net】3des加密
- MD5、3DES加密
- 3-DES加密解密
- 3des加密类
- 3DES加密
- 3DES加密解密
- 3des加密解密
- 3DES加密
- 3des加密解密
- 三道题
- QEvent的使用注意事项
- Node.js用来做什么?我们为什么要用它?
- RMQ
- Codeforces Round #423 (Div. 2) B Black Square 黑色正方形 思维题
- 3DES加密,秘钥长度为32
- 解决maven下载慢的问题
- FM(因子分解机系列)
- shell getopts 用法
- table中的某一格字数太多,要换行
- ORACLE 不走索引(失效)的原因以及解决办法
- js删除数组元素
- js call()与apply()
- 4143:和为给定数