当前位置:  开发笔记 > 编程语言 > 正文

.Net和iPhone之间的AES互操作性?

如何解决《.Net和iPhone之间的AES互操作性?》经验,为你挑选了1个好方法。

我需要加密iPhone上的字符串并将其发送到.Net Web服务进行解密.我能够在iPhone和.Net上加密/解密,但是来自iPhone的加密字符串不能被.Net解密.我得到的错误是"填充无效,无法删除".

.Net代码来自:http: //blog.realcoderscoding.com/index.php/2008/07/dot-net-encryption-simple-aes-wrapper/

iPhone代码使用以下示例代码:http://nootech.wordpress.com/2009/01/17/symmetric-encryption-with-the-iphone-sdk/

AFAIK我的关键设置是相同的:

result.BlockSize = 128; // iPhone: kCCBlockSizeAES128
result.KeySize = 128; // kCCBlockSizeAES128
result.Mode = CipherMode.CBC;
result.Padding = PaddingMode.PKCS7; // kCCOptionPKCS7Padding

我尝试了不同的生成密文的方法.你好/你好是:

e0PnmbTg/3cT3W + 92CDw1Q == .Net

iPhone上的yrKe5Z7p7MNqx9 + CbBvNqQ ==

和"openssl enc -aes-128-cbc -naltalt -a -in hello.txt -pass pass:hello"生成:QA + Ul + r6Zmr7yHipMcHSbQ ==

更新:我在这里发布了相应的工作代码.



1> johnny..:

至少,您使用的是不同的初始化向量(IV).

.Net代码使用IV的密钥.

private static AesCryptoServiceProvider GetProvider(byte[] key)
{
    //Set up the encryption objects
    AesCryptoServiceProvider result = new AesCryptoServiceProvider();
    byte[] RealKey = Encryptor.GetKey(key, result);
    result.Key = RealKey;
    result.IV = RealKey;
    return result;
}

private static byte[] GetKey(byte[] suggestedKey, AesCryptoServiceProvider p)
{
    byte[] kRaw = suggestedKey;
    List kList = new List();
    for (int i = 0; i < p.LegalKeySizes[0].MinSize; i += 8 )
    {
        kList.Add(kRaw[i % kRaw.Length]);
    }
    byte[] k = kList.ToArray();
    return k;
}

应该是:kList.Add(kRaw[(i / 8) % kRaw.Length]);.否则,长度为%8 == 0的密钥将重复使用相同的字母,doh!

因此.Net使用的IV(和密钥)是:hleolhleolhleolh.这不是API的一部分,而是由于您指向的包装器代码(其中有一个严重的错误......).

iPhone代码使用0代表IV.

// Initialization vector; dummy in this case 0's.
uint8_t iv[kChosenCipherBlockSize];
memset((void *) iv, 0x0, (size_t) sizeof(iv));

默认情况下,openssl会预先添加一个随机生成的盐(这就是输出更长的原因!).

openssl输出更安全,因为它是在随机初始化向量之前.看起来base64解码字符串的前几个字节是"Salted__".您也可以要求openssl不使用盐(-naltalt)和/或提供IV(-iv).

基本上,openssl,.Net和iPhone使用相同的加密,您只需要小心如何使用加密密钥和初始化向量初始化API.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有