【问题标题】:Using AES encryption across javascript and c#在 javascript 和 c# 中使用 AES 加密
【发布时间】:2012-09-14 12:34:53
【问题描述】:

我正在尝试在 javascript 中加密一个字符串,然后使用 c# 在服务器中将其解密。我想在服务器端使用 System.Security.Cryptography.Rijndael,在客户端使用一些 AES 实现,例如 thisthis

我对密码学了解不多,所以基本上我会生成一个密钥并将其发送给客户端,然后使用该密钥加密我的文本并将其发送回服务器。

我的问题是 Javascript AES 实现使用密钥来加密文本,但 c# Rijndael 类使用密钥和向量。那个向量是从哪里来的?

【问题讨论】:

  • 你应该看看stackoverflow.com/a/11859450/1310220,其他人也有类似的问题。问题通常是在每一侧设置密钥和 IV 并确保加密模式正确的方式。几乎每个人都使用 CBC(密码块链接),因此 IV 和密钥通常是最复杂的。

标签: asp.net encryption aes


【解决方案1】:

AES 只是一个分组密码,它是一种加密原语。其目的是加密单个数据块(16 字节)。

加密需要的远不止这些。您需要一种方法来加密任意数量的数据,并且希望以一种不会泄露任何信息的方式。为此,您需要将数据量分成块,将最后一部分填充为一个完整的块,然后以某种巧妙的方式加密每个块。这样做是加密模式的责任。

最简单的模式(电子食谱,ECB),只是用相同的密钥加密每个块,但这非常危险。其他模式需要某种初始化状态,它需要是随机的,但可以公开。

要加密和解密您的数据,您必须同时了解分组密码双方的加密模式,并且您必须找到一种方法来在加密方生成初始状态并在解密端恢复它,分别初始化编码器和解码器。

简而言之:你需要更多关于你在做什么的信息!

【讨论】:

  • 对于我正在尝试做的事情,您有更简单的解决方案吗?我不需要绝密安全,只是不想在网络上发送纯文本。
  • @nima:只要确保你知道所有两端使用的加密细节,然后相应地设置两端。正如我所说,您需要知道加密模式。
  • 我认为你是对的,没有简单的方法可以解决这个问题,所以我开始阅读有关它的书 :) 谢谢
  • 我希望你没有放弃,如果你还在寻找一个不需要深入研究密码学的相当简单的解决方案,我希望你让我们知道。
  • 您也可以考虑在客户端和服务器端同时使用 C# 来降低复杂性。
【解决方案2】:

这可能不是您正在寻找的。但我认为你真正需要做的是实现 SSL。

http://en.wikipedia.org/wiki/Secure_Sockets_Layer

这可能会解决您的问题,而无需参与编码密码学。

【讨论】:

    猜你喜欢
    • 2020-09-05
    • 2016-12-17
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    相关资源
    最近更新 更多