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

标签 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"

因此,如果我尝试加密“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/

相关文章:

c# - MVC 3 : DropDownList on an Edit Form for an object that is a property of a ViewModel

java - 如何在java中的AES加密中将加密数组截断为大小16

python - 替代密码验证

java - 我的希尔密码有什么问题吗? (Java 安卓)

iphone - 在 canAuthenticateAgainstProtectionSpace 中检查公钥

security - 攻击同步时钟协议(protocol)(Kerberos)

c# - C# 枚举中具有相同整数值的元素的排序

c# - winform中同一区域的面板

c# - 字典包含键,但崩溃说它不

java - 将加密方法从 Java 移植到 Python