C# 为什么加密字节数组的长度与其char[]表示形式不同?

C# 为什么加密字节数组的长度与其char[]表示形式不同?,c#,encryption,C#,Encryption,我正在研究一些加密/解密算法,我注意到加密的byte[]数组的长度始终为33,char[]数组的长度始终为44。有人知道这是为什么吗 (我使用的是Rijndael加密。)不,一点也不知道,但我的第一个想法是,您的加密算法的构建使其从输出数据中每10位删除1位 只有您可以确定,因为我们无法从这里看到您的代码:-)这当然不是所有加密算法都是如此,它必须是您正在使用的特定算法的一个属性。在不知道它是什么算法的情况下,我只能猜测,但比率33/44表明,该算法可能将输出字节数组中的每个字符压缩为6位。这可

我正在研究一些加密/解密算法,我注意到加密的byte[]数组的长度始终为33,char[]数组的长度始终为44。有人知道这是为什么吗


(我使用的是Rijndael加密。)

不,一点也不知道,但我的第一个想法是,您的加密算法的构建使其从输出数据中每10位删除1位


只有您可以确定,因为我们无法从这里看到您的代码:-)

这当然不是所有加密算法都是如此,它必须是您正在使用的特定算法的一个属性。在不知道它是什么算法的情况下,我只能猜测,但比率33/44表明,该算法可能将输出字节数组中的每个字符压缩为6位。这可能意味着它假设使用的不同字符不超过64个,这对于纯文本来说是一个很好的假设(事实上,base64解码就是这样工作的)


但是,在不知道您使用的是什么算法的情况下,这完全是猜测。

在不知道您使用的加密方式的情况下,要确定确切原因有点困难。首先,这里有一篇关于。听起来您可能正在使用明文的散列,这就是结果更短的原因


编辑:这是一个文件的来源。看起来密文输出最初与明文输入的长度相同,然后他们在其上执行base64,正如前面的海报所述,这将使最终输出减少到原始输入的3/4。

和。大多数加密算法都有块大小,输入需要填充到块大小的倍数。此外,将二进制数据转换为文本通常需要将3个字节扩展为4个字符。

如果只是将字节一一替换,则加密算法相当糟糕。这是50年前的最新技术,并且:

所以它是Base64的一个属性!这解释了很多。非常感谢你!