ユニバーサル Windows アプリケーションで AES128-EBC 暗号化文字列を取得する際に助けが必要です。
キーとして使用される文字列のパスワードがあります。長さ 32 ビットの MD5 ハッシュ値を使用して、テキストを AES128-EBC で暗号化したいと考えています。今、私は MD5Hash を作成するためにこれを使用しています:
public string GetMD5Hash(String strMsg)
{
string strAlgName = HashAlgorithmNames.Md5;
IBuffer buffUtf8Msg = CryptographicBuffer.ConvertStringToBinary(strMsg, BinaryStringEncoding.Utf8);
HashAlgorithmProvider objAlgProv = HashAlgorithmProvider.OpenAlgorithm
string strAlgNameUsed = objAlgProv.AlgorithmName;
IBuffer buffHash = objAlgProv.HashData(buffUtf8Msg);
if (buffHash.Length != objAlgProv.HashLength)
{
throw new Exception("There was an error creating the hash");
}
string hex = CryptographicBuffer.EncodeToHexString(buffHash);
return hex;
}
そして、暗号化のためのこのコード:
public string Encrypt(string input, string pass)
{
SymmetricKeyAlgorithmProvider provider = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesEcbPkcs7);
CryptographicKey key;
string encrypted = "";
byte[] keyhash = Encoding.ASCII.GetBytes(GetMD5Hash(pass));
key = provider.CreateSymmetricKey(CryptographicBuffer.CreateFromByteArray(keyhash));
IBuffer data = CryptographicBuffer.CreateFromByteArray(Encoding.Unicode.GetBytes(input));
encrypted = CryptographicBuffer.EncodeToBase64String(CryptographicEngine.Encrypt(key, data, null));
return encrypted;
}
SymmetricAlgorithmNames.AesEcbPkcs7
私が使用している理由はSymmetricAlgorithmNames.AesEcb
、出力文字列が空である場合です。理由がわかりません。私の質問は: 私のコードは AES128-ECB 暗号化を作成しますか? 私は本当にそうかどうかわからないからです。その暗号化されたデータを待っているソフトウェアはそれを認識しないため、復号化できません。