2017-06-07 5 views
0

Je dois implémenter le mode de chaînage personnalisé pour le cryptage. J'ai besoin d'utiliser un chiffrement par bloc symétrique (AES, 3DES, DES, IDEA). Le problème que je rencontre est, les bibliothèques/wrappers que j'ai trouvés ne le permettent pas. BouncyCastle a ceux comme Enum: Mode = CipherMode.CBC, donc je ne vois pas - comment je peux utiliser le mien. System.Security.Cryptography semblent faire la même chose.Comment utiliser les modes de chaînage personnalisés dans .Net avec OpenSSL?

Y at-il une bibliothèque .NET ou un wrapper, qui permet des modes de chaînage personnalisés? Actuellement, seule l'idée que j'ai est de crypter chaque bloc en utilisant CBC avec IV plein de bits zéro et d'implémenter mon mode de chaînage dessus, mais ça ne me semble pas une bonne idée.

Répondre

1

Je ne connais aucune bibliothèque qui supporte un rappel de chaînage, cela va en quelque sorte à l'encontre de la boîte noire de la plupart des API cryptographiques.

La façon d'atteindre votre objectif est de crypter en utilisant ECB, car il s'agit simplement d'appliquer l'algorithme de cryptage à ces données. Par exemple, pour faire CBC:

private byte[] _iv; 
private ICryptoTransform _encryptor; 

private void EncryptBlock(byte[] input, byte[] output) 
{ 
    byte[] buf = (byte[])input.Clone(); 

    for (int i = 0; i < buf.Length; i++) 
    { 
     buf[i] ^= _iv[i]; 
    } 

    _encryptor.TransformBlock(buf, 0, buf.Length, output, 0); 
    Buffer.BlockCopy(out, 0, _iv, 0, output.Length); 
} 

(toutes sortes d'erreurs vérification omis)

Étant donné quelque part, vous les choses initialisés comme

using (Aes aes = Aes.Create()) 
{ 
    aes.Mode = CipherMode.ECB; 
    aes.Key = key; 
    _encryptor = aes.CreateEncryptor(); 
    _decryptor = aes.CreateDecryptor(); 
} 

(etc).

+0

Le mode ECB peut ne pas suffire. OP peut avoir besoin de spécifier la direction de la transformation. Par exemple, le mode CTR exploite le chiffrement de bloc dans sa direction directe (c'est-à-dire, le chiffrement) à la fois pour les opérations de chiffrement et de déchiffrement. – jww