c# - 将字符串加密为固定长度

标签 c# .net encryption base64

我想将字符串加密为base64,输入的字符串可以是差分长度(限制为16个字符),我想得到固定长度的加密字符串。

有谁知道在 .NET 框架中执行此操作的方法吗?或者有算法来做到这一点?

最佳答案

(编辑:我一直假设您想要加密一个字符串,然后编码结果为base64,总是以相同的输出长度结束。如果您可以澄清问题以确认这一点,或者解释您想要的,如果不是这样,将会有所帮助。)

好吧,有一个非常简单的算法适用于任何总是将固定长度的输入加密为固定长度的输出的加密方案(并且有很多这样的加密方案):

  • 使用 UTF-16 将字符串编码为二进制(这将始终为相同的字符串输入提供相同的字节数组长度)
  • 使用随机数据将二进制数据填充到 32 字节(即最大大小)
  • 在末尾(或开始)添加一个额外的字节指示原始长度
  • 加密二进制数据(始终为 33 字节)
  • 使用 Convert.ToBase64String 将结果转换为 base64

要解密,只需反转过程即可:

  • 使用 Convert.FromBase64String 将 base64 文本转换为加密的二进制数据
  • 解密二进制数据(返回“明文”二进制)
  • 从第一个或最后一个字节开始计算长度
  • 将明文二进制文件的相关部分解码为 UTF-16 文本

(使用 MSDN 查找每个步骤的详细信息,并随时在特定部分寻求帮助。您选择的加密算法将取决于您尝试做什么,我不是这方面的专家,我很害怕。)

编辑:如果您只需要一个散列,那么其他问题就会发挥作用。您是否总是希望相同的字符串最终被散列相同的字符串?这通常适用于散列而不是加密。

关于c# - 将字符串加密为固定长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5177804/

相关文章:

c# - 在 LINQ 查询中只选择几列

c# - resharper 如何识别要为其智能感知包含哪些文件?

c# - 将文件从一个项目复制到另一个项目时出错

c# - Selenium 2.0 WebDriver 和 :hover pseudoclass 的解决方法

c# - 如何在Key Container中存储私钥?

java - 为什么 JNCryptor/RNCryptor 库会抛出 InvalidHMACException?

c# - ElasticSearch:使用NEST从动态条件列表中创建查询

c# - 如何从 IBM MQ 上的 put 方法获得确认?

.net - 使用 ContractNamespace 属性设置 WCF DataContract 命名空间

c - 被 vigenere.c 困住了