如何使用命令行 openssl 获得与以下 Objective-C 加密方法相同的结果?
- (NSData *)AES256EncryptWithKey:(NSString *)key {
NSData *returnData = nil;
char keyPtr[kCCKeySizeAES256+1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding | kCCOptionECBMode,
keyPtr,
kCCBlockSizeAES128,
NULL,
[self bytes],
dataLength,
buffer,
bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
returnData = [[NSData alloc] initWithBytes:buffer length:numBytesEncrypted];
}
free(buffer);
return returnData;
}
我尝试了以下方法(带或不带-nosalt),但没有成功:
openssl aes-256-ecb -nosalt -in original.txt -out encrypted.txt
openssl aes-128-ecb -nosalt -in original.txt -out encrypted.txt
虽然有可能,但你不应该这样做。这个 ObjC 加密代码非常糟糕。它错误地创建了密钥,这就是为什么您在使用 OpenSSL 时遇到问题(它创建密钥的效果也很差,但更好,并且以不同的方式)。如果您想要与 OpenSSL 兼容的 ObjC 加密模块,请参阅RNC加密器 https://github.com/rnapier/RNCryptor这是为了解决这个问题而设计的。如果可能的话,我会避免使用 OpenSSL,但目前我推荐没有简单的命令行替代品。
请参阅 RNCryptor 文档,了解此 ObjC 代码被破坏的原因,以及 OpenSSl 的 aes 加密例程的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)