【发布时间】:2015-09-21 13:29:28
【问题描述】:
我真的需要一些帮助才能使用 CryptoSwift 将 Objective-c 代码转换为 swift。我不确定如何在 Swift 中使用如下函数:bzero、getCString、malloc。
+(NSData*)encryptData:(NSData*)data
{
static NSString *key = @"BitCave012345678";
char keyPtr[kCCKeySizeAES128+1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [data length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionECBMode,
keyPtr,kCCKeySizeAES128,NULL,[data bytes],dataLength,
buffer, bufferSize, &numBytesEncrypted);
if(cryptStatus == kCCSuccess)
{
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer);
return nil;
}
有没有人知道如何满足需要指针的参数?
我正在尝试使用UnsafeMutablePointers,我也尝试了下面的代码,但我知道这是完全错误的:
var key: NSString = "BitCave012345678"
var keyPtr: Array<Character> = Array<Character>(count: 17, repeatedValue: "0")
bzero(&keyPtr, 17*sizeof(Character))
key.getCString(&keyPtr, maxLength: 17*sizeof(Character), encoding: NSUTF8StringEncoding)
【问题讨论】:
-
请永远不要将相关问题信息“外包”到链接后面的某个地方,并且绝对不要将源代码作为图像呈现。
-
你看过关于 CCCrypt 的现有 Swift Q&A 吗?在我看来,已经有几个例子了。
-
@MartinR 实际上我找到了这个:stackoverflow.com/questions/25754147/… 但我仍然不确定如何管理。
-
最好避免使用 CryptoSwift,除此之外,它比基于 Common Crypto 的实现慢 1000 倍以上。 Apple 的 Common Crypto 已通过 FIPS 认证,因此经过了严格的审查,使用 CryptoSwift 在正确性和安全性方面是有机会的。
标签: objective-c swift encryption commoncrypto cryptoswift