【发布时间】:2018-02-23 14:19:17
【问题描述】:
java代码是
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] ivBytes = new byte[c.getBlockSize()];
String IV = CryptoUtils.hexEncode(ivBytes);
它给出随机的 16 字节响应,如
563ffcecaa43753bd09613095ad24a12.
如何将对应的代码写入objective c?
我有一些客观的 c 代码 -
- (NSData *)createCipher:(NSString*)data WithKey:(NSString*)key {
NSData* result = nil;
// setup key
unsigned char cKey[kCCKeySizeAES256]; // room for terminator (unused)
bzero(cKey, sizeof(cKey)); // fill with zeroes (for padding)
[key getBytes:cKey length:kCCKeySizeAES256];
// setup iv
char cIv[kCCBlockSizeAES128];
bzero(cIv, kCCBlockSizeAES128);
if (iv) {
[iv getBytes:cIv length:kCCBlockSizeAES128];
}
// setup output buffer
size_t bufferSize = [data length] + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
// do encrypt
size_t encryptedSize = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, //CCOperation op
kCCAlgorithmAES128, //CCAlgorithm alg
kCCOptionPKCS7Padding, //CCOptions
cKey, //const void *key
kCCKeySizeAES256, //size_t keyLength
cIv, // optional initialization vector
[data bytes], // optional per op and alg
[data length],
buffer, // data RETURNED here
bufferSize,
&encryptedSize);
if (cryptStatus == kCCSuccess) {
result = [NSData dataWithBytesNoCopy:buffer length:encryptedSize];
} else {
free(buffer);
NSLog(@"[ERROR] failed to encrypt|CCCryptoStatus: %d", cryptStatus);
}
return result;
}
但是,这段代码是用来加密数据的,现在如何生成IV?
【问题讨论】:
-
563ffcecaa43753bd09613095ad24a12是以十六进制表示的 16 字节,而不是问题中所述的“32 位响应”。 -
天啊,“万事达卡的 iOS 开发人员”,一定有人了解那里的加密以及如何处理 IV!只是想知道万事达卡如何让开发人员在没有密码学基础培训的情况下编写加密代码。
标签: ios objective-c encryption