如何在进行加密时设置密钥和向量?

时间:2011-06-29 13:41:58

标签: c# encryption aes

我正在使用以下代码。密钥和向量是从Web复制的。那里没有秘密。

    private static byte[] key = { 123, 217, 19, 11, 24, 26, 85, 45, 114, 184, 27, 162, 37, 112, 222, 209, 241, 24, 175, 144, 173, 53, 196, 29, 24, 26, 17, 218, 131, 236, 53, 209 };
    private static byte[] vector = { 146, 64, 191, 111, 23, 3, 113, 119, 231, 121, 221, 112, 79, 32, 114, 156 };
    private ICryptoTransform encryptor, decryptor;
    private UTF8Encoding encoder;

    public SimplerAES()
    {
        RijndaelManaged rm = new RijndaelManaged();
        encryptor = rm.CreateEncryptor(key, vector);
        decryptor = rm.CreateDecryptor(key, vector);
        encoder = new UTF8Encoding();
    }

有人可以解释密钥和向量设置的含义。我想私下编码我的数据加密方式,但我不知道从哪里开始。

谢谢,

2 个答案:

答案 0 :(得分:3)

密钥只是您的加密密钥,即某人需要解密数据的密码。 AES是一种对称密码,因此相同的密钥将用于加密和解密。

initialization vector(IV)是一个技术细节:在block cipher中使用CBC mode时,每个输入块的密文取决于前一个输入块的密文(以及当然,在当前输入块和键上)。但是,在尝试加密第一个块时,没有要考虑的“先前”数据;在这种情况下,IV取代了“0th”输入块的密文。

实际上,这意味着在解密时,除了密钥之外,还必须知道IV。但是,IV不是敏感信息,您只需将其与密文一起存储(从而使密钥成为您尚未拥有的解密所需的唯一信息)。

注意: 多次使用相同的IV 是一种好习惯;每次需要加密时,你都可以简单地生成一个随机的。

答案 1 :(得分:0)

查看以下网站应该有所帮助。

Encryption 1

Encryption 2

Encryption 3