C# 加密时如何设置密钥和向量?

C# 加密时如何设置密钥和向量?,c#,encryption,aes,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 = { 1

我正在使用以下代码。密钥和向量是从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();
    }
有人能解释一下键和向量设置的含义吗。我想私下编码我的数据加密的方式,但我不知道从哪里开始


谢谢,

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

(IV)是一个技术细节:当使用in时,每个输入块的密文取决于前一个输入块的密文(当然也取决于当前输入块和键)。但是,当尝试加密第一个块时,没有“先前”数据需要考虑;在这种情况下,IV将取代“0”输入块的密文

实际上,这意味着解密时,除了知道密钥外,还需要知道IV。但是,IV不是敏感信息,您可以简单地将其与密文一起存储(从而使密钥成为您需要解密的唯一信息,而您还没有这些信息)


注意:最好不要多次使用同一个IV;每次需要加密某些内容时,您只需随机生成一个即可。

请查看以下网站


你所说的“私下编码”是什么意思?编写一些辅助函数?或者其他什么?作为补充:CBC不是使用IVs的唯一模式,但IV始终提供“第0个”block@DarkSquirrel42-你说的“IV总是提供“第0”块”是什么意思?@JennyK:他的意思是IV总是在启动时,在加密第一个块之前,扮演密码“当前状态”的角色(因为在这一点上没有“真实的”先前状态)。@JennyK:他指的是需要IV的模式的各种公式。例如CBC模式:C_n=E_k(P_n+C_{n-1}),其中E是分组密码,k是密钥,C是密文,P是明文。因此,第一个密码块是C_1=E_k(P_1+C_0)根据公式。但是什么是C_0(“第0”块)?根据定义,它是IV。很好的描述。这是否意味着IV可以被比作散列盐,因为它不是必须为解密所知的敏感数据?