c# - 如何将熵引入编码的 Base64 字符串?

标签 c# web-services cryptography aes entropy

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

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

所以。如何向 AES 编码的 Base64 字符串引入额外的(可逆的)熵?

最佳答案

更好的方法是让服务器端 session 保存信息。客户端的 cookie 将是一种临时验证的 GUID。在服务器端,它将与他们的用户名相关联。这也可以在服务器端过期,以防止它在路上被重复使用。

这将允许使用随机字符串对用户进行身份验证,而无需不断地传输他们的用户名和密码。使用 Rainbow 表,可以非常轻松地反转散列密码和其他内容。

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

关于c# - 如何将熵引入编码的 Base64 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9560603/

相关文章:

c# - 解析字符串时出现奇怪的错误?

c# - 将对象分配给其他对象会创建副本吗?

c# - 如何以正确的方式初始化 KeyValuePair 对象?

java - 为 Twitter OAuth 生成哈希

c - 如何通过 TLS 测试 POODLE?

c# - "asp-format"不适用于标签助手

c# - 如果我向我的枚举类型添加新的可能值,这会改变我的 wsdl 吗?

asp.net - 从数据库向 JW Player 提供电影文件

java - 转换错误 : "The current event is not START_ELEMENT but 2"

javascript - 如何在 SJCL 中实现公钥/私钥加密?