This article解释了为什么不应使用字符串编码来对密文进行往返。但是,如果我尝试使用推荐的Convert.ToBase64String
,如果原始字符串未打包为4字节块,则会出现异常。在下面的示例中,原始字符串不起作用,但只是“Zoidberg”,因为它长8个字节(在使用Convert.ToBase64String
时打包成6字节数组)。
正如文章中所承诺的,如果我使用任何字符串编码,我在解密值时会收到“错误数据”错误。那么原始字符串应该如何作为字节数组输入加密API?
string text = "Zoidberg is important!";
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
// This throws FormatException: "The input is not a valid Base-64 string as it
// contains a non-base 64 character, more than two padding characters,
// or a non-white space character among the padding characters"
byte[] cipherText = provider.Encrypt(Convert.FromBase64String(text), false);
string plainText = Convert.ToBase64String(provider.Decrypt(cipherText, false));
答案 0 :(得分:0)
我认为你被这篇文章误导了。
转换自string -> byte[] --> encrypted byte[] --> string
是没有意义的,这篇文章正在向您展示 ,而不是 。
据推测,你想去string -> byte[] -> encrypted byte[] -> (network, whatever) -> encrypted byte[] -> byte[] -> string.
使用Encoding以这种方式将字符串转换为字节是可以的。
我不知道为什么您链接的文章会警告您不要使用 加密字节 并将其直接转换回字符串。看起来很傻。
你说你试图对密文进行往返,所以我会使用包含字符串加密字节的字节数组来忘记base-64编码。