gpt4 book ai didi

c# - 在 C# 中使用 Bouncy CaSTLe 加密/解密

转载 作者:可可西里 更新时间:2023-11-01 03:01:27 25 4
gpt4 key购买 nike

我正在使用“BouncyCaSTLe.Crypto.dll”在我的应用程序中加密/解密字符串。我正在使用以下 code from this blog :

  1. 我有一个类 BCEngine,与上面提到的链接中给出的完全相同。

    public class BCEngine
    {
    private readonly Encoding _encoding;
    private readonly IBlockCipher _blockCipher;
    private PaddedBufferedBlockCipher _cipher;
    private IBlockCipherPadding _padding;

    public BCEngine(IBlockCipher blockCipher, Encoding encoding)
    {
    _blockCipher = blockCipher;
    _encoding = encoding;
    }

    public void SetPadding(IBlockCipherPadding padding)
    {
    if (padding != null)
    _padding = padding;
    }

    public string Encrypt(string plain, string key)
    {
    byte[] result = BouncyCastleCrypto(true, _encoding.GetBytes(plain), key);
    return Convert.ToBase64String(result);
    }

    public string Decrypt(string cipher, string key)
    {
    byte[] result = BouncyCastleCrypto(false, Convert.FromBase64String(cipher), key);
    return _encoding.GetString(result);
    }

    /// <summary>
    ///
    /// </summary>
    /// <param name="forEncrypt"></param>
    /// <param name="input"></param>
    /// <param name="key"></param>
    /// <returns></returns>
    /// <exception cref="CryptoException"></exception>
    private byte[] BouncyCastleCrypto(bool forEncrypt, byte[] input, string key)
    {
    try
    {
    _cipher = _padding == null ? new PaddedBufferedBlockCipher(_blockCipher) : new PaddedBufferedBlockCipher(_blockCipher, _padding);
    byte[] keyByte = _encoding.GetBytes(key);
    _cipher.Init(forEncrypt, new KeyParameter(keyByte));
    return _cipher.DoFinal(input);
    }
    catch (Org.BouncyCastle.Crypto.CryptoException ex)
    {
    throw new CryptoException(ex.Message);
    }
    }
    }

我使用的是 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 时遇到异常

“ key 长度不是 128/192/256 位。”

有人可以指导吗?我是一个完整的新手。提前致谢。

最佳答案

您的 string key = "DFGFRT"; 不是 128/192/256 位。

DFGFRT 是 6 个字符,即 6(或 12?)字节 = 8*12 = 96 位(最多)。

要获得 128 位 key ,您需要一个 16 字节的字符串,所以为了安全起见,我会使用 16 个字符的字符串,因此如果使用单字节字符,它将是一个 128 位 key ,如果使用宽字符,它将是 256 .

关于c# - 在 C# 中使用 Bouncy CaSTLe 加密/解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5910454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com