字符串到 byte[] 数组,反之亦然

cof*_*eak 2 c# encryption cryptography aes

我正在实现自己的 AES 代码,在解密过程中遇到一些问题。

byte[] output;
output = Encrypt(EncryptBufferInput);//encrypt "12",output[] is 300532188151293E4ACA3BA529B821C1
str.Append(Encoding.ASCII.GetString(output) );

output = Decrypt(DecryptBufferInput);//in hex, DecryptBufferInput should be "300532188151293E4ACA3BA529B821C1"
str.Append(Encoding.ASCII.GetString(output));//does not decrypt back to "12"
Run Code Online (Sandbox Code Playgroud)

因此,如果我尝试加密“12”,它会给出十六进制形式的“300532188151293E4ACA3BA529B821C1”值。当我尝试将其解密回“12”时,它给了我一个错误的值,因为 DecryptBufferInput 不是“300532188151293E4ACA3BA529B821C1”,而是其他一些值......只有前几个值是相同的。EncryptBufferInput 和 DecryptBufferInput 都是 byte[] 数组,我使用 Encoding.ASCII.GetBytes(string) 用相应的字符串(要加密的字符串或要解密的字符串)填充字节数组。我究竟做错了什么??

Mar*_*ell 5

您获得的二进制文件Encrypt不代表文本数据,因此您不应使用Encoding. 使用Convert.ToBase64String和 来Convert.FromBase64String代替它。也可以看看

在解码步骤中,需要颠倒顺序;所以:如果您接受字符串输入,您将需要:

加密:

  • 以字符串开头:"12"
  • 使用Encoding(最好Encoding.UTF8)得到byte[]加密
  • Encrypt与未加密的一起使用byte[]以获得加密的byte[]
  • 如果需要,可以将Convert.ToBase64String其表示为字符串
  • 以加密字符串结尾

解密:

  • 以加密字符串开头
  • 用于Convert.FromBase64String获取加密的byte[]
  • Decrypt与加密的一起使用byte[]以获得未加密的byte[]
  • 使用相同的方法 Encoding来获取字符串
  • 以字符串结尾:"12"