首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用OpenSSL和CommonCrypto加密

用OpenSSL和CommonCrypto加密
EN

Stack Overflow用户
提问于 2016-10-24 21:16:22
回答 2查看 2.1K关注 0票数 0

我试图最终用OpenSSL加密文件,用Objective解密文件,但在此之前,我需要两种方法来对文件进行相同的加密。

这就是我所拥有的:

要加密的字符串:“这是字符串”

键:“硫磺键”

OpenSSL:

代码语言:javascript
运行
复制
openssl enc -aes256 -a -e -nosalt -in InputFileWithString.txt -out OutputFile.txt thisisthekey

从openSSL:HncUM4ryxSR7Rdi7Z49HPl9veOPxkk3l8GYIgorBhbk=生成基64编码字符串

目标-c CommonCrypto:

代码语言:javascript
运行
复制
+(NSString *)encryptText:(NSString *)text withKey:(NSString *)key{
    NSData *plainData = [text dataUsingEncoding:NSUTF8StringEncoding];

    NSData *encryptedData = [plainData AES256EncryptWithKey:key];

    NSString *base64String = [encryptedData base64EncodedStringWithOptions:0];

    return base64String;
}

- (NSData*)AES256EncryptWithKey:(NSString*)key {
    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,
                                          keyPtr, kCCKeySizeAES256,
                                          NULL,
                                          [self bytes], dataLength, 
                                          buffer, bufferSize,
                                          &numBytesEncrypted);

    if (cryptStatus == kCCSuccess)
    {
        return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
    }

    free(buffer);
    return nil;
}

生成的基64编码字符串:gNCs4d0GAxZHRcOtu8RVpLgN0ONKk1r5XkJ4GtL7W2I=

如您所见,每种方法都生成不同的加密字符串。有什么办法使这两者产生相同的字符串吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-15 21:50:22

票数 0
EN

Stack Overflow用户

发布于 2016-10-24 22:16:28

  1. 使用全长键,256位,即32字节,不依赖填充.CCCrypt由于kCCKeySizeAES256需要一个32字节的密钥,但是您提供了12个字节和零填充剩余的密钥空间。
  2. CCCrypt的默认模式是CBC模式,但您提供了一个NULL IV。这基本上会给出欧洲央行模式,但最好是指定选项:kCCOptionECBMode
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40227701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档