将字符串加密为固定长度

RRR*_*RRR 5 .net c# encryption base64

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

有谁知道在.NET框架中这样做的方法?或者有算法来做到这一点?

Jon*_*eet 6

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

好吧,有一个非常简单的算法可以使用任何加密方案,它总是将固定长度的输入加密到固定长度的输出(并且有很多这些):

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

要解密,只需撤消该过程:

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

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

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

  • @RRR:22个字符不是你最初要求的,也不是散列.如果你把问题写得不好,当人们提出很多问题时,你不应该感到惊讶. (2认同)

Fun*_*eng 1

如果您正在寻找单向加密(无需解密),您可以使用 SHA1

        string secretKey = "MySecretKey";
        string salt = "123";
        System.Security.Cryptography.SHA1 sha = System.Security.Cryptography.SHA1.Create();
        byte[] preHash = System.Text.Encoding.UTF32.GetBytes(secretKey + salt);
        byte[] hash = sha.ComputeHash(preHash);
        string password = System.Convert.ToBase64String(hash);
Run Code Online (Sandbox Code Playgroud)

如果你想加密和解密,你可以使用 RSA。