【问题标题】:Encryption Decryption AES/ECB/NoPadding加密解密AES/ECB/NoPadding
【发布时间】:2016-09-02 14:54:50
【问题描述】:
是否有任何方法可以在 iOS 中按照此算法对字符串进行解密/解密?
我只知道在 java 中这个类:javax.crypto.Cipher 用于此目的
【问题讨论】:
标签:
ios
aes
encryption-symmetric
ecb
【解决方案1】:
Apple Common Crypto 确实支持 AES、ECB 模式(使用 CBC 模式)和无填充。如果不使用填充,则输入数据长度必须是 AES 块大小(16 字节)的精确倍数,标准填充为 PKCS#7(née PKCS#5)。
您最好使用支持安全加密的解决方案,例如支持多种语言和平台的RNCryptor。
仅仅使用加密并不能提供安全性,它必须与其他加密原语一起正确使用。
【解决方案2】:
Apple 的 Common Crpto 确实支持它。导入 CommonCryptor.h 和 CCCryptorStatus "CCCrypt" 就是你需要的。
这是一个例子:
+ (NSData *)encryptDataWithAESECB:(NSData *)data
key:(NSData *) key
error:(NSError **)error {
size_t outLength;
int cipherLen = (int)(data.length/kAlgorithmBlockSize + 1)*kAlgorithmBlockSize;
NSMutableData *cipherData = [NSMutableData dataWithLength:cipherLen];
NSData *newData = [self addPaddingBeforeEncryptWithAESECB:data];
CCCryptorStatus result = CCCrypt(kCCEncrypt, // operation
kAlgorithm, // Algorithm
kCCOptionECBMode, // Mode
key.bytes, // key
key.length, // keylength
0,// iv
newData.bytes, // dataIn
newData.length, // dataInLength,
cipherData.mutableBytes, // dataOut
cipherData.length, // dataOutAvailable
&outLength); // dataOutMoved
if (result == kCCSuccess) {
cipherData.length = outLength;
}else {
if (error) {
*error = [NSError errorWithDomain:kRNCryptManagerErrorDomain code:result userInfo:nil];
}
return nil;
}
return cipherData;
}
请参阅我的帖子以获取更多信息:
AES ECB iOS Encrypt