gpt4 book ai didi

asp.net - AES128 位加密字符串与 .net 上的不相似

转载 作者:行者123 更新时间:2023-11-29 11:01:53 24 4
gpt4 key购买 nike

我正在 iOS 应用程序中实现 AES128 位加密/解密以从 .net 服务器发送/接收数据,我几乎完成了,但是在单元测试期间我在加密字符串中遇到了一些问题,一些加密字符串与 .net 上的不相似服务器,可以说 98% 的字符串在双方都是正确的,但问题出现在 2% 的字符串中,当我匹配双方加密的字符串时,发现在 iOS 端生成的字符串有点短,.net 端是长字符串。我发现 iOS 字符串的另一件事是 .net 字符串的子字符串。当我尝试解密 iOS 生成的加密字符串时,它未解密显示 null 但是当我尝试解密 .net 服务器生成的加密字符串(它比 iOS 大)时,我能够看到解密的字符串。

使用相同的KEY(服务器端和iOS端16个字符长)。

能否请您提出解决方案或我哪里错了。

非常感谢大家。

原始字符串:“custId=10&mode=1”KEY="密码密码"

在 iOS 加密字符串:r51TbJpBLYDkcPC+Ei6Rmg==

at .net 加密字符串:r51TbJpBLYDkcPC+Ei6RmtY2fuzv3RsHzsXt/RpFxAs=

用于加密的填充 = kCCOptionPKCS7Padding;

我遵循了本教程。 http://automagical.rationalmind.net/2009/02/12/aes-interoperability-between-net-and-iphone/

最佳答案

A similar question found on CryptoSE

我的版本 TL;DR

基本上 .net 和 iOS 都有不同的实现,并且由于您遵循的指南是从 2009 年开始的,我预计它现在已经相当过时了,因为每个平台至少有 1 个重大修订从那时起。

原始答案给出以下答案:

我可以立即想到四个原因:

  1. 他们都没有使用 AES256。我在 Obj-C 文档中看到他们正在使用 AES256 的直接声明(除非你故意更改它),我在 Visual Basic 文档中没有看到任何说明他们正在使用的 key 大小的声明(除非那是他们意思是“ block 位”)。

  2. 不同的键。 AES256 采用 256 位的 key ;没有标准方法可以将五个字符的字符串转换为 256 位值。现在,有很多可能的方法;不能特别保证它们都使用同一个。

  3. 不同的操作模式。 AES block 密码采用 128 位值,并将其转换为 128 位值。然而,并非我们所有的消息都可以放入 128 位,此外,有时除了消息加密之外,我们还想做其他事情。操作模式是一种采用分组密码的方法,并将其用作执行一些更普遍有用的功能(例如加密更长的消息)的工具。有多种标准的操作模式,Obj-C文档中声明它使用的是CBC模式; Visual Basic 文档有一些听起来很吓人的词,可能是 CBC 模式的乱码解释。

  4. 静脉注入(inject)。某些操作模式(如 CBC 模式)让加密器随机选择一个“初始化向量”;可以与加密消息一起翻译(因为解密器将需要该值)。如果您对消息进行第二次加密,此初始化向量所做的其中一件事是,第二个密文将与第一个密文完全不同;这样,听的人就无法推断出您刚刚重复了一条消息。 Obj-C 文档特别指出它将随机选择一个 IV(除非告诉你自己给它一个)。

  5. 如您所见,两个密文可能不同的原因有很多。您可以尝试一件事:将密文从一个传递给另一个,并要求他们解密;如果可以,您可以非常确定双方在做基本相同的事情。

关于asp.net - AES128 位加密字符串与 .net 上的不相似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15517496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com