我正在尝试在 javascript 中加密一个字符串,然后使用 c# 在服务器中将其解密。我想在服务器端使用 System.Security.Cryptography.Rijndael 并在客户端使用一些像这样或这样的 AES 实现。
我对密码学知之甚少,所以基本上我生成一个密钥并将其发送给客户端并用该密钥加密我的文本并将其发送回服务器。
我的问题是 Javascript AES 实现使用密钥来加密文本,但 c# Rijndael 类使用密钥和向量。该向量来自哪里?
AES 只是一个分组密码,它是一种密码原语。其目的是加密单个数据块(16 字节)。
加密需要的远不止这些。您需要一种方法来加密任意数量的数据,并且希望以一种不会泄露任何信息的方式。为此,您需要将数据量分成块,将最后一部分填充为一个完整的块,然后以某种巧妙的方式加密每个块。这样做是加密模式的职责。
最简单的模式(电子食谱,ECB),只是用相同的密钥加密每个块,但这非常危险。其他模式需要某种初始化状态,它需要是随机的,但可以公开。
要加密和解密您的数据,您必须同时了解分组密码和加密模式,并且您必须找到一种方法在加密端生成初始状态并在解密端恢复它以初始化编码器和解码器,分别。
简而言之:你需要更多关于你在做什么的信息!
这可能不是您正在寻找的。但我可以认为你真正需要做的是实现 SSL。
http://en.wikipedia.org/wiki/Secure_Sockets_Layer
这可能会解决您的问题,而无需参与编码密码学。