我想将字符串加密为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/