【问题标题】:can't decrypt the AES256 encrypted text无法解密 AES256 加密文本
【发布时间】:2017-02-11 00:45:48
【问题描述】:

我用了这么多库,这么多函数,却无法解密。

NSString *key = @"innoways21897016";
NSString *iv = @"61079821218970166107982121897016";
NSString *encrypted = @"iG5lIZKGevzV3UfhcqOzgA/xwKhAKjB75G1L4Z1s/RU=";
NSData *data = [encrypted dataUsingEncoding:NSUTF8StringEncoding];
NSData *dataDecrypted = [data AES256DecryptWithKey:key andIV:iv];
NSLog(@"decrypt data = %@",dataDecrypted);
NSString *receivedDataDecryptString = [[NSString alloc]initWithData:dataDecrypted encoding:NSUTF8StringEncoding];
NSLog(@"decrypt string = %@",receivedDataDecryptString);

receivedDataDecryptString 总是给我(空)响应而不是解密字符串。

输出将是 - “heidi”

谢谢。

【问题讨论】:

  • dataDecrypted 的输出不是null
  • @Mr.UB 输出的 dataDecrypted 是:- 当我转换成字符串时它返回 - (null
  • 这个结果可能意味着很多事情:错误的密钥、错误的编码、不完整/过满的密文。您应该显示加密代码并给出您使用的示例值。否则,很容易猜测此代码(或加密代码)可能有什么问题。总之,请创建一个Minimal, Complete, and Verifiable example
  • @NiravKotecha NSData+AES256 有许多不同的实现方式,您具体使用哪一种?在您的示例中包含加密代码或提供您正在使用的代码的链接。
  • 如果您的代码有问题,那么您应该提供一个Minimal, Complete, and Verifiable example 来证明您的问题。帮助我们帮助您,而不会浪费时间猜测。另外,不要提供指向您的代码的链接。相反,edit 你的问题包括代码。链接总是断开,如果断开,这个问题将失去所有价值。

标签: ios objective-c iphone encryption aes


【解决方案1】:

有一些错误和潜在错误:

  1. 您正在使用 256 位密钥 (AES256DecryptWithKey) 指定 AES,但提供的是 128 位(16 字节)密钥。使用 128 位密钥指定 AES 或提供 256 位密钥。

  2. AES 的块大小为 16 字节,您提供 32 字节的 IV,IV 应为 16 字节。

也许您的密钥和 IV 颠倒了。

  1. 您以 Base64 编码提供加密数据,加密方法可能期望输入为 NSData 或 NSString。长度必须是块大小的倍数,对于 AES 为 16 字节,提供错误长度的加密数据是您从CCCrypt 收到错误的少数几种方法之一,解密方法最有可能使用这种方法。

  2. 您没有提供预期的解密结果,这使得测试解决方案变得困难。

  3. 加密后的数据为32字节(Base64解码后)。 “heidi”小于块大小,因此将填充到 16 字节。这留下了一个神秘的 16 字节。

【讨论】:

  • 在答案中添加了第 5 项。
  • 16 字节 IV + 16 字节填充密码块 = 32 字节输出。
  • @zaph 但 android 端使用此密钥和 IV。他们正在使用“PaddedBufferedBlockCipher”库。某种充气城堡 jar 文件
猜你喜欢
  • 1970-01-01
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多