如何将熵引入编码的Base64字符串

本文关键字:编码 Base64 字符串 | 更新日期: 2023-09-27 18:26:34

我正在创建一个json Web服务(C#,WCF),我需要标识一个用户。没有会话管理,因此用户需要为每个命令发送一个标识字符串。我想出的解决方案是AES加密用户的凭据和字符串"过期"的时间(目前为1000ms),然后在发送(通过URL或其他方式)之前使用Base64对其进行编码(HttpServerUtility.UrlTokenEncode)。

我的问题是:编码的字符串看起来几乎总是一样的,只有很少的更改(我认为这将是到期的分钟和秒,因为凭据的日期和小时很少更改。虽然一个字符串只能使用一次(最后一个收到的字符串被记录,倒数第二个可能已经过期),我仍然认为拦截和阻止GET请求,伪造一些东西然后重新发送是很容易的。当攻击是自动的时,即使超时也可能不起作用。

所以。如何将附加(可逆)熵引入AES编码的Base64字符串?

如何将熵引入编码的Base64字符串

实现这一点的更好方法是拥有一个保存信息的服务器端会话。客户端上的cookie将是经过临时身份验证的某种GUID。在服务器端,它将与他们的用户名相关联。这也可能在服务器端过期,以防止它在以后被重复使用。

这将允许用户使用随机字符串进行身份验证,而不必不断传输他们的用户名和密码。使用Rainbow表,可以很容易地反向散列密码和其他内容。

在加密之前向加密字符串添加SALT也会有所帮助。我建议您在末尾至少添加15个额外的随机字符。如果你选择走那条路,这将使暴力迫使变得更加困难。

将熵添加到AES/CBC加密数据中的方法是使用随机IV,并将IV(正好是16字节,AES块的大小)前置到密文中,然后以64为基数对其进行编码。我希望您使用CBC而不是ECB,因为它可能不安全。