Я использую "BouncyCastle.Crypto.dll" для шифрования / дешифрования строки в моем приложении. Я использую следующий код из этого блога :
У меня есть класс BCEngine, точно такой же, как тот, который указан в упомянутой выше ссылке.
открытый класс BCEngine
{
закрытое только для чтения Кодирование _encoding;
закрытый только для чтения IBlockCipher _blockCipher;
частный PaddedBufferedBlockCipher _cipher;
частный IBlockCipherPadding _padding;
общедоступный BCEngine (IBlockCipher blockCipher, кодирование кодирования)
{
_blockCipher = blockCipher;
_encoding = кодировка;
}
public void SetPadding (заполнение IBlockCipherPadding)
{
если (заполнение! = ноль)
_padding = обивка;
}
шифрование публичной строки (обычная строка, строковый ключ)
{
byte [] результат = BouncyCastleCrypto (истина, _encoding.GetBytes (простой), ключ);
return Convert.ToBase64String (результат);
}
расшифровка публичной строки (строковый шифр, строковый ключ)
{
byte [] результат = BouncyCastleCrypto (ложь, Convert.FromBase64String (шифр), ключ);
return _encoding.GetString (результат);
}
///
///
///
///
///
///
///
///
закрытый байт [] BouncyCastleCrypto (bool forEncrypt, вход byte [], строковый ключ)
{
пытаться
{
_cipher = _padding == null? новый PaddedBufferedBlockCipher (_blockCipher): новый PaddedBufferedBlockCipher (_blockCipher, _padding);
byte [] keyByte = _encoding.GetBytes (ключ);
_cipher.Init (forEncrypt, новый KeyParameter (keyByte));
return _cipher.DoFinal (ввод);
}
catch (Org.BouncyCastle.Crypto.CryptoException ex)
{
бросить новое CryptoException (например, сообщение);
}
}
}
Я использую форму asp.net, в которой я написал код, как показано ниже:
public partial class EncryptionForm : System.Web.UI.Page
{
Encoding _encoding;
IBlockCipherPadding _padding;
string key = "DFGFRT";
string textToBeEncrypted = "Original text. Please encrypt me.";
string txtEncryptedText = string.empty;
string txtDecryptedText = string.empty;
protected void Page_Load(object sender, EventArgs e)
{
_encoding = Encoding.ASCII;
Pkcs7Padding pkcs = new Pkcs7Padding();
_padding = pkcs;
}
protected void btnEncrypt_Click(object sender, EventArgs e)
{
txtEncryptedText = AESEncryption(textToBeEncrypted, key, true);
}
protected void btnDecrypt_Click(object sender, EventArgs e)
{
txtDecryptedText = AESDecryption(txtEncryptedText.Text, key, true);
}
public string AESEncryption(string plain, string key, bool fips)
{
BCEngine bcEngine = new BCEngine(new AesEngine(), _encoding);
bcEngine.SetPadding(_padding);
return bcEngine.Encrypt(plain, key);
}
public string AESDecryption(string cipher, string key, bool fips)
{
BCEngine bcEngine = new BCEngine(new AesEngine(), _encoding);
bcEngine.SetPadding(_padding);
return bcEngine.Decrypt(cipher, key);
}
}
Не уверен, но по какой-то причине я получаю исключение при вызове btnEncrypt_Click
" Длина ключа не 128/192/256 бит. "
Кто-нибудь может помочь? Я в этом новичок. Заранее благодарим.