【发布时间】:2014-07-26 03:06:20
【问题描述】:
我正在尝试将我的 AES 加密类从 c# 转换为 Objective-c(我是 Objective-c 的新手)并且对一件事有点困惑。我正在 c# 中从一个像这样的传输对象创建我的键和初始化向量对象:
Mode = CipherMode.CBC;
Padding = PaddingMode.PKCS7;
KeySize = 256;
Key = Encoding.UTF8.GetBytes(transferredObject.Substring(x1, x2));
IV = Encoding.ASCII.GetBytes(transferredObject.Substring(y1, y2));
其中 x & y 是 int 值,代表一定的范围,transferObject 是 String。添加然后我可以使用 Key & IV 进行加密/解密过程。
我知道,在objective-c中我应该使用这个方法:
CCCryptorStatus cryptStatus = CCCrypt( kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
key, kCCKeySizeAES256, iv,
[self bytes], dataLength,
buffer, bufferSize,
&numBytesEncrypted);
用于加密和类似的解密方法,但我找不到方法,如何获取我的密钥和 iv 对象。 Objective-c 的示例通常显示如下内容:
[key getCString:keyPtr maxLength:sizeof( keyPtr ) encoding:NSUTF8StringEncoding];
那么,如果我在 Objective-c 中有相同的单个 NSString * transferredObject 对象,我如何获得我的密钥和 IV?
接受答案中的解决方案将起作用。 另一种解决方案是使用 NSString substringToIndex 方法。
看起来像这样:
NSString* IV = [key substringWithRange:NSMakeRange(x1, x2)];
NSString* Key = [key substringWithRange:NSMakeRange(y1, y2)];
char ivPtr[kCCKeySizeAES128 + 1];
bzero(ivPtr, sizeof(ivPtr));
[IV getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
char keyPtr[kCCKeySizeAES256+1]; // room for terminator (unused)
bzero( keyPtr, sizeof( keyPtr ) ); // fill with zeroes (for padding)
[Key getCString:keyPtr maxLength:sizeof( keyPtr ) encoding:NSWindowsCP1251StringEncoding];
CCCryptorStatus cryptStatus = CCCrypt( kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyPtr, kCCKeySizeAES256,
ivPtr,
[self bytes], dataLength,
buffer, bufferSize,
&numBytesDecrypted );
【问题讨论】:
标签: c# objective-c encryption aes