纯文本:使用AES算法加密和解密文本
密钥(256):testsecret
结果(https://aesencryption.net/):iFhSyFY3yYoO2G6GVGkdhZJjD + h0Pxv5fQnO3xIarzuGQSkIxlrpSprC5bC3gJ2U
我在对象中使用小的代码来解密此文本:
(NSData *)AES256DecryptWithKey:(NSString *)key { //对于AES256,“密钥”应为32个字节,否则为空值 char keyPtr [kCCKeySizeAES256 + 1]; //终结符的空间(未使用) bzero(keyPtr,sizeof(keyPtr)); //用零填充(用于填充)
//获取密钥数据 [key getCString:keyPtr maxLength:sizeof(keyPtr)encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [自身长度];
//请参阅文档:对于分组密码,输出大小将始终小于或 //等于输入大小加上一个块的大小。 //这就是为什么我们需要在此处添加一个块的大小 size_t bufferSize = dataLength + kCCBlockSizeAES128; void * buffer = malloc(bufferSize);
size_t numBytesDecrypted = 0; // char iv [kCCBlockSizeAES128 + 1]; bzero(iv,sizeof(iv)); CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,kCCAlgorithmAES,kCCOptionPKCS7Padding, keyPtr,kCCKeySizeAES256, NULL / *初始化向量(可选) /, [自身字节],dataLength,/ 输入 / 缓冲区,bufferSize,/ 输出* / &numBytesDecrypted);
如果(cryptStatus == kCCSuccess) { //返回的NSData拥有缓冲区的所有权,并在释放时释放它 返回[NSMutableData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; }
free(缓冲区); //释放缓冲区; 返回零; }
结果:使用AES算法的t \ PFLFC \ ^ X \ ^ C ^ \ ^^ \ ^ RWQV \ ^ \ ypt文本
似乎总是错误的第一个16位块。你能帮我吗。加密时我错了什么?
答案 0 :(得分:0)
尝试使用AESCrypt-ObjC代替Cryptlib库。
安装
将此行添加到您的班级:
#import "AESCrypt.h"
用法
NSString *message = @"top secret message";
NSString *password = @"p4ssw0rd";
加密
NSString *encryptedData = [AESCrypt encrypt:message password:password];
解密
NSString *message = [AESCrypt decrypt:encryptedData password:password];
希望这会有所帮助。
此外,您还可以看到以下答案:https://stackoverflow.com/a/51767050/5167909
答案 1 :(得分:0)
使用CommonCrypto并确保您传递参数,作为回报,您将获得kCCSuccess。
仔细阅读CommonCrypto文档,您肯定会找到想要的东西。