iOS AES解密 我遇到的问题
来源:互联网 发布:java实现aes加密 编辑:程序博客网 时间:2024/06/07 06:58
底层给得key是:static uint8 AesKey[16]={0x01,0x02,0x03,0x04,0x05,0,0x07,0,0x09,0x10,0,0x12,0,0x14,0,0x16};
网上找的大多是传入字符串类型的key,而我这里把传入的key 从字节数组转为nsdata类型,将网上的代码略作修改,最后解密成功。以下贴代码
#import <Foundation/Foundation.h>
@class NSString;
@interface NSData (Encryption)
- (NSData *)AES128EncryptWithKey:(NSString *)key; //加密
- (NSData *)AES128DecryptWithKey:(NSData *)key; //解密
@end
#import "NSData+AES.h"
#import <CommonCrypto/CommonCryptor.h>
#define gIv nil //可以自行修改
@implementation NSData (Encryption)
//(key和iv向量这里是16位的)这里是CBC加密模式,安全性更高
- (NSData *)AES128EncryptWithKey:(NSString *)key {//加密
char keyPtr[kCCKeySizeAES128+1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtrmaxLength:sizeof(keyPtr)encoding:NSUTF8StringEncoding];
char ivPtr[kCCKeySizeAES128+1];
memset(ivPtr, 0,sizeof(ivPtr));
[gIvgetCString:ivPtr maxLength:sizeof(ivPtr)encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [selflength];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmAES128,
kCCOptionECBMode,
keyPtr,
kCCBlockSizeAES128,
ivPtr,
[selfbytes],
dataLength,
buffer,
bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
return [NSDatadataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer);
return nil;
}
- (NSData *)AES128DecryptWithKey:(NSData *)key {//解密
char keyPtr[kCCKeySizeAES128+1];
bzero(keyPtr, sizeof(keyPtr));
// [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
[key getBytes:keyPtrlength:kCCKeySizeAES128+1];//此处方法为修改的方法,上面这一句注释掉得方法不适用这里
char ivPtr[kCCKeySizeAES128+1];
memset(ivPtr, 0,sizeof(ivPtr));
[gIvgetCString:ivPtr maxLength:sizeof(ivPtr)encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [selflength];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmAES128,
kCCOptionECBMode,
keyPtr,
kCCBlockSizeAES128,
ivPtr,
[selfbytes],
dataLength,
buffer,
bufferSize,
&numBytesDecrypted);
if (cryptStatus == kCCSuccess) {
return [NSDatadataWithBytesNoCopy:buffer length:numBytesDecrypted];
}
free(buffer);
return nil;
}
@end
+(NSString*)decryptAESData:(NSData*)data app_key:(NSData *)key
{
//使用密码对data进行解密
NSData *decryData = [data AES128DecryptWithKey:key];
NSLog(@"%s/n",[[decryDatadescription] UTF8String]);
//将解了密码的nsdata转化为nsstring
NSString *str = [[NSStringalloc] initWithData:decryDataencoding:NSUTF8StringEncoding];
return [str autorelease];
}
//下面是调用方法
NSData *txp = data.object;
static UInt8 AesKey[16]={0x01,0,0x03,0,0x05,0,0x07,0,0x09,0x10,0,0x12,0,0x14,0,0x16};
NSData *data2 = [NSDatadataWithBytes:AesKey length:16];//这是关键更改,key不是字符串 key是data2
NSString * string2 = [SecurityUtildecryptAESData:txp app_key:data2];
- iOS AES解密 我遇到的问题
- iOS AES的加密解密
- iOS AES的加密解密
- iOS AES加密解密的使用
- iOS-AES加解密
- 解决iOS、Android、Java加解密不一致的问题(DES、AES)
- AES解密中FlushFinalBlock遇到的错误 解决方案 和疑问
- java AES加密遇到的一些问题
- ios与android与java通用的AES加解密
- 解决Linux操作系统下AES解密失败的问题
- 解决Linux操作系统下AES解密失败的问题
- {转}解决Linux操作系统下AES解密失败的问题
- 解决Linux操作系统下AES解密失败的问题
- 解决Linux操作系统下AES解密失败的问题
- 关于Android中使用AES加密解密的问题
- 解决Linux操作系统下AES解密失败的问题
- 我遇到的问题!!
- 我遇到的问题
- struts2源码分析--IOC容器的实现(操作以及容器的初始化)
- object-c 转换到C
- js、jq怎么控制文本框只能输入数字
- UI--学习模仿QQ未读提醒拖拽删除
- Java Client 与C++ Servertcp通信 demo
- iOS AES解密 我遇到的问题
- 第16周《C++语言基础》实践参考——平方根中的异常
- iOS中Objective-C与JavaScript之间相互调用的实现(实现了与Android相同的机制)
- jvm 堆内存 栈内存 大小设置
- Markdown支持UML
- 如何下载和安装CocoaPods?
- Swift迁移常见问题
- 深入浅出jsonp
- 移动产品经理需要跟踪app的哪些数据?