加密和解密错误 [英] Error in Encryption and Decryption

查看:81
本文介绍了加密和解密错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述







我使用代码解密一些细节并再次对其进行加密以查看原始内容,但有些细节有双重加密,我无法解密细节。请帮忙。



使用的代码是



 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> 

方法



谢谢

--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 this

Convert.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆