我在C#中使用Base64字符串时遇到问题#Base64无效的字符串错误
我有一个从PHP调用的.exe。它得到2个参数并返回一个加密密钥。 (.exe文件是哪里有问题)
在PHP我这样做:
<?php
$key = "AAAA";
$pass=" AAAA";
echo shell_exec("cryptograph.exe generateKey $key $pass");
?>
它应该工作,becouse这些都是基地64串,或者至少,据我所知,有一个String 4的长度倍数是有效的base 64字符串。
,但我得到以下(是西班牙语,但我将它翻译波纹管):
Encrypt en System.Convert.FromBase64String(String s)
en cryptograph.Cryptography.Encrypt(String plainStr, String completeEncodedKey, Int32 keySize) en cryptograph.Cryptography.generateKey(String key, String pass)
en cryptograph.cryptograph.Main(String[] args)
La entrada no es una cadena Base 64 v lida porque contiene un car cter que no es Base 64, m s de dos caracteres de relleno o un car cter de relleno que no es un espacio en blanco
基本上它最高审计机关,它是没有有效的Base64字符串,becouse它包含一个char这是毫无基地65,更多的填料(relleno是这样翻译的吗?)没有空格的字符。
这是c#代码的一部分。
public static void generateKey(String key, String pass)
{
String e = Encrypt(pass, key, 256);
Console.WriteLine("Entro generateKey");
System.Console.WriteLine(e);
}
private static string Encrypt(string plainStr, string completeEncodedKey, int keySize)
{
Console.WriteLine("Entro Encrypt");
RijndaelManaged aesEncryption = new RijndaelManaged();
aesEncryption.KeySize = keySize;
aesEncryption.BlockSize = 128;
aesEncryption.Mode = CipherMode.CBC;
aesEncryption.Padding = PaddingMode.PKCS7;
Console.WriteLine(completeEncodedKey);
aesEncryption.IV = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey)).Split(',')[0]);
aesEncryption.Key = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey)).Split(',')[1]);
byte[] plainText = ASCIIEncoding.UTF8.GetBytes(plainStr);
ICryptoTransform crypto = aesEncryption.CreateEncryptor();
Console.WriteLine("Abajo de crypto");
// The result of the encryption and decryption
byte[] cipherText = crypto.TransformFinalBlock(plainText, 0, plainText.Length);
return Convert.ToBase64String(cipherText);
}
的问题,发生在一些这两条线:
aesEncryption.IV = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey)).Split(',')[0]);
aesEncryption.Key = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey)).Split(',')[1]);
有你在争论之间尝试逗号而不是空格?这就是代码看起来像它期望的那样 – Petesh 2013-03-14 20:36:59
当您完成编码密钥的Console.WriteLine时,写什么? – 2013-03-14 20:39:25
刚刚尝试过,结果相同。 cryptograph.exe是一个命令行程序。你可以打开cmd并使用它,当你传递参数时你用一个空格分隔它们。 – leojg 2013-03-14 20:40:27