字符串到字节[]数组,反之亦然
本文关键字:反之亦然 数组 到字节 字符串 | 更新日期: 2023-09-27 18:01:16
我正在实现自己的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
代替。参见.
在解码步骤中,需要颠倒顺序;所以:如果你接受字符串输入,你需要:
加密:
- 开头:
"12"
- 使用
Encoding
(最好是Encoding.UTF8
)来获得byte[]
来加密 - 使用
Encrypt
和未加密的byte[]
来获得加密的byte[]
- 使用
Convert.ToBase64String
表示为字符串如果你需要 - 以加密字符串 结尾
解密:
- 以加密字符串 开头
- 使用
Convert.FromBase64String
获取加密的byte[]
- 使用
Decrypt
和加密的byte[]
来获得未加密的byte[]
- 使用相同的
Encoding
来获取字符串 - end with string:
"12"
如何设置EncryptBufferInput
和DecryptBufferInput
?我假设你的Encrypt
和Decrypt
方法都接受字符串,所以我尝试这个:
byte[] output = Encrypt(EncryptBufferInput);
string encryptedOutput = Convert.ToBas64String(output);
str.Append(encryptedOutput);
byte[] decrypted = Decrypt(Convert.FromBase64String(encryptedOutput));
string decryptedOutput = Encoding.ASCII.GetString(decrypted);
str.Append(decryptedOutput);
如果他们拿走了byte[]
:
byte[] output = Encrypt(EncryptBufferInput);
string encryptedOutput = Convert.ToBase64String(output);
str.Append(encryptedOutput);
byte[] decrypted = Decrypt(output);
string decryptedOutput = Encoding.ASCII.GetString(decrypted);
str.Append(decryptedOutput);
请注意:ASCII和泰语,德语,俄语,希腊语(和许多其他)不能很好地一起玩-使用Unicode或至少UTF8。