我需要幫助檢索Universal Windows Application下的AES128-EBC加密字符串。
我有一個用作密鑰的字符串密碼。使用32位長度的MD5散列值,我想用AES128-EBC對文本進行加密。 現在我用這來創建MD5Hash:UWP下的AES128-ECB
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加密?因爲我不確定它確實如此。因爲等待加密數據的軟件不能識別它,所以它不能解密它。
如果您需要安全性:1.不要使用ECB模式,它也不安全,請參閱[ECB模式](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29),向下滾動到企鵝。將CBC模式與隨機iv一起使用,並將其加到加密數據中。 2.不要使用MD5派生加密密鑰,使用隨機鹽對HMAC進行迭代大約持續100ms(鹽需要與散列一起保存)。使用諸如password_hash,PBKDF2,Bcrypt和類似函數的函數。關鍵是要讓攻擊者花費大量時間通過強力查找密碼。 – zaph
@zaph不幸的是,根據ECB或其他UWP缺失部分,甚至有IETF標準。你不能總是使用另一個。 –
@LexLi當然,除了開發者運行的一些相同的代碼之外,沒有任何理由的使用很多。 IOW,需要明確理由使用ECB模式。在這裏,我們也有用於密碼密鑰推導的MD5哈希值,所以我假設可能錯誤地認爲ECB模式沒有很好的理由或理解。 – zaph