Я хочу зашифровать некоторый текст, используя TripleDES Encryption с использованием режима шифрования ECB в приложении Windows Store (Windows 8.1), но у меня возникают проблемы с созданием ключа для симметричного алгоритма.TripleDES Encryption в приложении Windows Store (Windows 8.1)
Я хотел бы сказать вам, что я сейчас делаю в .NET 4.5
public static string EncryptData(string Message, string passphrase)
{
byte[] tpinBytes = System.Text.Encoding.ASCII.GetBytes(Message);
string tpinHex = ByteArrayHelper.ByteArrayToHexString(tpinBytes);
byte[] Results;
byte[] TDESKey = ByteArrayHelper.HexStringToByteArray(passphrase);
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.Zeros;
byte[] DataToEncrypt = ByteArrayHelper.HexStringToByteArray(tpinHex);
try
{
ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
}
finally
{
TDESAlgorithm.Clear();
}
return ByteArrayHelper.ByteArrayToHexString(Results);
}
Теперь, я написал этот фрагмент кода для моего Windows Store (Windows 8.1) приложения;
private static string TripleDESEncryption(string strMsg, string passphrase)
{
String strAlgName = SymmetricAlgorithmNames.TripleDesEcb;
var bytes = System.Text.Encoding.UTF8.GetBytes(strMsg);
string hex = BitConverter.ToString(bytes).Replace("-", "");
// Initialize the initialization vector
IBuffer iv = null;
// Create a buffer that contains the encoded message to be encrypted.
IBuffer DataToEncrypt = CryptographicBuffer.DecodeFromHexString(hex);
// Open a symmetric algorithm provider for the specified algorithm.
SymmetricKeyAlgorithmProvider objAlg = SymmetricKeyAlgorithmProvider.OpenAlgorithm(strAlgName);
// Create a symmetric key.
IBuffer TDESKey = CryptographicBuffer.DecodeFromHexString(passphrase);
CryptographicKey key = objAlg.CreateSymmetricKey(TDESKey); // Line of problem.
// Encrypt the data and return.
IBuffer buffEncrypt = CryptographicEngine.Encrypt(key, DataToEncrypt, iv);
return CryptographicBuffer.EncodeToHexString(buffEncrypt);
}
Когда я сопоставляю значения TDESKey и EncryptData, они идентичны. Однако проблема возникает, когда я пытаюсь создать симметричный ключ (после назначения TDESKey). Это дает мне ошибку . Значение не входит в ожидаемый диапазон, и в соответствии с MSDN forums размер блока может не поддерживаться (что я не могу понять), и у него даже нет тех свойств, которые указаны на этом форуме (например, SupportedKeyLengths).
Может ли кто-нибудь помочь мне с образцом или указать на ошибку, которую я делаю?
как вы размещаете paddingmode.zeros в приложении вдов? –
Я не думаю, что есть способ сделать это. Это? :) –
У вас есть решение? Я также получаю ту же ошибку – asitis