我正在实现自己的 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"
因此,如果我尝试加密“12”,它会给出十六进制形式的“300532188151293E4ACA3BA529B821C1”值。当我尝试将其解密回“12”时,它给了我一个错误的值,因为 DecryptBufferInput 不是“300532188151293E4ACA3BA529B821C1”,而是其他一些值......只有前几个值是相同的。 EncryptBufferInput 和 DecryptBufferInput 都是 byte[] 数组,我使用 Encoding.ASCII.GetBytes(string) 用相应的字符串(要加密的字符串或要解密的字符串)填充字节数组。 我做错了什么??
最佳答案
您从Encrypt
获得的二进制文件不代表文本数据,因此您不应使用Encoding
。使用 Convert.ToBase64String
代替,并使用 Convert.FromBase64String
反转它。 See also .
在解码步骤中,需要颠倒顺序;所以:如果您接受字符串输入,您将需要:
加密:
- 以字符串开头:
“12”
- 使用
Encoding
(最好是Encoding.UTF8
)获取要加密的byte[]
- 使用
Encrypt
和未加密的byte[]
来获取加密的byte[]
- 如果需要,请使用
Convert.ToBase64String
将其表示为字符串 - 以加密字符串结尾
解密:
- 以加密字符串开头
- 使用
Convert.FromBase64String
获取加密的byte[]
- 使用
Decrypt
和加密的byte[]
来获取未加密的byte[]
- 使用相同
编码
来获取字符串 - 以字符串结尾:
"12"
关于c# - 字符串到 byte[] 数组,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15108413/