Pergunta

Preciso gerar matriz de bytes para TripleDES de criptografia.Eu não quero usar .generateKey() porque eu preciso saber os bytes da chave para passá-los para outro aplicativo.

Obrigado pelas respostas, mas eu esqueci de mencionar uma coisa:os bytes têm que ser paridade ímpar.Caso contrário, eu não posso gerar um TripleDES chave a partir deles.Eu não sou tão familiarizado com a paridade ímpar, então eu acho que tem que criar um byte, verifique se ele tem paridade ímpar ou não;então, se ele não colocá-lo na matriz, caso contrário, não.

Foi útil?

Solução

Se você precisa para garantir a paridade ímpar, você tem que calcular-lo sozinho. Isso deve fazer:

var rng = new RNGCryptoServiceProvider();
var key = new byte[24];
rng.GetBytes(key);

for(var i = 0; i < key.Length; ++i)
{
    int keyByte = key[i] & 0xFE;
    var parity = 0;
    for (var b = keyByte; b != 0; b >>= 1) parity ^= b & 1;
    key[i] = (byte)(keyByte | (parity == 0 ? 1 : 0));
}

return key;

Outras dicas

Como sobre:

RandomNumberGenerator rng = RandomNumberGenerator.Create();
byte[] key = new byte[24]; // For a 192-bit key
rng.GetBytes(key);

tripleDes.Key = key;

Note que RandomNumberGenerator é adequado para criptografia de trabalho (em termos de razoavelmente seguro, de difícil prever dados aleatórios), considerando que System.Random não.

Mas ... qual é o problema com apenas:

TripleDES provider = TripleDES.Create();

byte[] key = provider.Key;

Lá você obter a sua chave usada pelo en- e decryptor criado com essa instância.

Note que as outras respostas carecem de um TripleDES.IsWeakKey .

O método GetBytes retornos crypthographically forte sequência de valores:

        var rng = System.Security.Cryptography.RandomNumberGenerator.Create();
        byte [] barr = new byte[128];
        rng.GetBytes(barr);
        foreach (var b in barr)
        {
            Console.WriteLine(b);
        }

E sobre Random.NextBytes()

Mais informações aqui .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top