C# での Base64 文字列の操作に問題があります
PHPから呼び出される.exeがあります。2 つのパラメーターを取得し、暗号化されたキーを返します。(.exeは私が問題を抱えている場所です)
PHPで私はこれを行います:
<?php
$key = "AAAA";
$pass=" AAAA";
echo shell_exec("cryptograph.exe generateKey $key $pass");
?>
これらはベース64文字列であるため、機能するはずです。または、少なくとも、長さが4の倍数の文字列が有効なベース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 文字列ではないと言っています。これは、Base 65 ではない文字が含まれているためです。
これは 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);
}
問題は、次の 2 行のいくつかで発生します。
aesEncryption.IV = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey)).Split(',')[0]);
aesEncryption.Key = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey)).Split(',')[1]);