加密和解密错误 [英] Error in Encryption and Decryption
本文介绍了加密和解密错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用代码解密一些细节并再次对其进行加密以查看原始内容,但有些细节有双重加密,我无法解密细节。请帮忙。
使用的代码是
public static string EncryptData (字符串消息)
{
byte []结果;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte [] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(passphrase));
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
byte [] DataToEncrypt = UTF8.GetBytes(Message);
try
{
ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
结果= Encryptor.TransformFinalBlock(DataToEncrypt,0,DataToEncrypt.Length);
}
最后
{
TDESAlgorithm.Clear();
HashProvider.Clear();
}
返回Convert.ToBase64String(Results);
}
公共静态字符串DecryptString(字符串消息)
{
byte []结果;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte [] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(passphrase));
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
byte [] DataToDecrypt = Convert.FromBase64String(Message);
try
{
ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();
结果= Decryptor.TransformFinalBlock(DataToDecrypt,0,DataToDecrypt.Length);
}
最后
{
TDESAlgorithm.Clear();
HashProvider.Clear();
}
返回UTF8.GetString(结果);
}
我发现以下错误
Base-64字符数组的长度无效。
解决方案
我认为您在解密时忘记将字符串从base64转换为普通字符串
使用此Convert.FromBase64String($ p> p>方法
谢谢
--RA
这是一种方法..试试..
private static string 加密( string plainStr, string completeEncodedKey, int keySize)
{
RijndaelManaged aesEncryption = new RijndaelManaged();
aesEncryption.KeySize = keySize;
aesEncryption.BlockSize = 128 跨度>;
aesEncryption.Mode = CipherMode.CBC;
aesEncryption.Padding = PaddingMode.PKCS7;
aesEncryption.IV = Convert.FromBase64String(Encoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey))。Split(' ,')[ 0 ]);
aesEncryption.Key = Convert.FromBase64String(Encoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey))。Split(' ,')[ 1 ]);
byte [] plainText = Encoding.UTF8.GetBytes(plainStr);
ICryptoTransform crypto = aesEncryption.CreateEncryptor();
// 加密和解密的结果
byte [] cipherText = crypto.TransformFinalBlock(plainText, 0 ,plainText.Length);
return Convert.ToBase64String(cipherText);
}
私人 static string 解密(字符串 encryptedText, string completeEncodedKey, int keySize)
{
RijndaelManaged aesEncryption = new RijndaelManaged的();
aesEncryption.KeySize = keySize;
aesEncryption.BlockSize = 128 ;
aesEncryption.Mode = CipherMode.CBC;
aesEncryption.Padding = PaddingMode.PKCS7;
aesEncryption.IV = Convert.FromBase64String(Encoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey))。Split(' ,')[ 0 ]);
aesEncryption.Key = Convert.FromBase64String(Encoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey))。Split(' ,')[ 1 ]);
ICryptoTransform decrypto = aesEncryption.CreateDecryptor();
byte [] encryptedBytes = Convert.FromBase64CharArray(encryptedText.ToCharArray(), 0 ,encryptedText 。长度);
return Encoding.UTF8.GetString(decrypto.TransformFinalBlock(encryptedBytes, 0 ,encryptedBytes.Length ));
}
Hi,
I m using the code to decrypt some details and again encrypt it to view the original, but some details are got double encrypted and I am not able to decrypt the details. Please help.
The code i m using is
public static string EncryptData(string Message) { byte[] Results; System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding(); MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider(); byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(passphrase)); TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider(); TDESAlgorithm.Key = TDESKey; TDESAlgorithm.Mode = CipherMode.ECB; TDESAlgorithm.Padding = PaddingMode.PKCS7; byte[] DataToEncrypt = UTF8.GetBytes(Message); try { ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor(); Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length); } finally { TDESAlgorithm.Clear(); HashProvider.Clear(); } return Convert.ToBase64String(Results); } public static string DecryptString(string Message) { byte[] Results; System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding(); MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider(); byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(passphrase)); TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider(); TDESAlgorithm.Key = TDESKey; TDESAlgorithm.Mode = CipherMode.ECB; TDESAlgorithm.Padding = PaddingMode.PKCS7; byte[] DataToDecrypt = Convert.FromBase64String(Message); try { ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor(); Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length); } finally { TDESAlgorithm.Clear(); HashProvider.Clear(); } return UTF8.GetString(Results); }
I m geting the below error
Invalid length for a Base-64 char array.
解决方案
I think you forget to convert the string from base64 to normal string while decrypting
use thisConvert.FromBase64String(in
DecryptString(method
Thanks
--RA
Here is one method..just try..
private static string Encrypt(string plainStr, string completeEncodedKey, int keySize) { RijndaelManaged aesEncryption = new RijndaelManaged(); aesEncryption.KeySize = keySize; aesEncryption.BlockSize = 128; aesEncryption.Mode = CipherMode.CBC; aesEncryption.Padding = PaddingMode.PKCS7; aesEncryption.IV = Convert.FromBase64String(Encoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey)).Split(',')[0]); aesEncryption.Key = Convert.FromBase64String(Encoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey)).Split(',')[1]); byte[] plainText = Encoding.UTF8.GetBytes(plainStr); ICryptoTransform crypto = aesEncryption.CreateEncryptor(); // The result of the encryption and decryption byte[] cipherText = crypto.TransformFinalBlock(plainText, 0, plainText.Length); return Convert.ToBase64String(cipherText); } private static string Decrypt(string encryptedText, string completeEncodedKey, int keySize) { RijndaelManaged aesEncryption = new RijndaelManaged(); aesEncryption.KeySize = keySize; aesEncryption.BlockSize = 128; aesEncryption.Mode = CipherMode.CBC; aesEncryption.Padding = PaddingMode.PKCS7; aesEncryption.IV = Convert.FromBase64String(Encoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey)).Split(',')[0]); aesEncryption.Key = Convert.FromBase64String(Encoding.UTF8.GetString(Convert.FromBase64String(completeEncodedKey)).Split(',')[1]); ICryptoTransform decrypto = aesEncryption.CreateDecryptor(); byte[] encryptedBytes = Convert.FromBase64CharArray(encryptedText.ToCharArray(), 0, encryptedText.Length); return Encoding.UTF8.GetString(decrypto.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length)); }
这篇关于加密和解密错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文