我有以下代码
String[] recievedChunks = received_data.Split('|');
String sb = "";
foreach (String chunck in recievedChunks)
{
sb+=(Cryptography.RSA.decrypt(globals.serverPrivateKey, chunck));
}
//sb = H4sIAAAAAAAAAG2MywrCQAxF/yXrUqjuulMXUlwI/kGcibU4L5IUkdJ/N1oXCq4mc+69ZwIXUARayNzXifSaRWuXY8Tkpd6TdkrxRFJyEoIKPpENetLBMmPvp53+qjwq1t3S8ySOh6JDTtZqVusX41zwHAjaCwYhk5m7qSBhNAab7c5KhQdnv6axQBTdbVkojzZQRk8/4FHsXlVwJ+Qv91wBk4xBzXs8wPwEOn1v+/wAAAA=
Debug.Log("dodecrypt" + sb);
Debug.Log(Convert.FromBase64String("H4sIAAAAAAAAAG2MywrCQAxF/yXrUqjuulMXUlwI/kGcibU4L5IUkdJ/N1oXCq4mc+69ZwIXUARayNzXifSaRWuXY8Tkpd6TdkrxRFJyEoIKPpENetLBMmPvp53+qjwq1t3S8ySOh6JDTtZqVusX41zwHAjaCwYhk5m7qSBhNAab7c5KhQdnv6axQBTdbVkojzZQRk8/4FHsXlVwJ+Qv91wBk4xBzXs8wPwEOn1v+/wAAAA="));
Debug.Log(Convert.FromBase64String(sb));
最后一行给我错误:
FormatException:输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非法字符。 有什么想法吗?
调试输出
dodecrypt H4sIAAAAAAAAAG2MywrCQAxF/yXrUqjuulMXUlwI/kGcibU4L5IUkdJ/N1oXCq4mc+69ZwIXUARayNzXifSaRWuXY8Tkpd6TdkrxRFJyEoIKPpENetLBMmPvp53+qjwq1t3S8ySOh6JDTtZqVusX41zwHAjaCwYhk5m7qSBhNAab7c5KhQdnv6axQBTdbVkojzZQRk8/4FHsXlVwJ+Qv91wBk4xBzXs8wPwEOn1v+/wAAAA=
UnityEngine.Debug:Log(Object)
GameClient:writeSocketReturnCrypted(String) (at
Assets/Src/Networking/GameClient.cs:221)
Assets.Src.Networking.Commands.GetItem.GetItem:getItem(Int32) (at
Assets/Src/Networking/Commands/GetItem/GetItem.cs:15)
GameClient:Update() (at Assets/Src/Networking/GameClient.cs:76)
System.Byte[]
UnityEngine.Debug:Log(Object)
FormatException: The input is not a valid Base-64 string as it contains a
non-base 64 character, more than two padding characters, or an illegal
character among the padding characters.
答案 0 :(得分:0)
基本64位编码的字符串以4对为单位进行评估。您必须提供一个可分为4的字符数。最后添加填充字符(=
)将执行:
byte[] b = Convert.FromBase64String("H4...==");
另一个问题是你正在阅读大块的内容。始终确保每个块最终都有适量的字符,否则您的程序将无法正确解码。
答案 1 :(得分:0)
我理解您的代码的方式是,您有一个|
分隔的基本64位编码的RSA加密数据块。您的输入放在一起的方式可以通过多种方式构建,因为解密工作但解码失败,我猜这样做是这样的:
|
然而,您的解密/解码过程与此序列不匹配:
|
确保解密/解码过程与加密/编码过程相同,但以反向顺序。现在你可能在=
的中间有几个sb
,这就是它适用于单个块(第二个Log)而不是整个concated base64字符串的原因(因为它&#39} ; s无效 - 您不能随意加入base64编码的字符串。)