Est-il un algorithme de hachage qui produit une table de hachage de taille de 64 bits en C#?
J'ai besoin pour produire une valeur de Hachage à partir d'une chaîne de longueur variable que je peux stocker dans un champ de plus de 16 ans (en raison des exigences liées au vendeur).
Je suis la concaténation de plusieurs chaînes de caractères qui sont transmis par l'intermédiaire d'un C# script de transformation afin de calculer la valeur de Hachage. Je suis contraint par le fournisseur du fichier de spécification en ce que la sortie de la table de hachage ne peut pas être plus longue que 16.
Quelqu'un aurait-il des suggestions? Comme un exemple de la chaîne de conversion de l'algorithme MD5 a une longueur de 32.
- 16 quoi? Est-il binaire ou texte?
- Idéalement, il serait de texte, car il sera écrit dans un fichier plat.
- plat de fichiers n'ont pas à être de texte.
- Les exigences pour le fichier que je dois produire un onglet ASCII délimité fichier plat.
Vous devez vous connecter pour publier un commentaire.
La cryptographie a des fonctions sont conçues de telle sorte que vous pouvez tronquer la sortie d'une certaine taille et le tronc de la fonction de hachage reste un sûr fonction de hachage cryptographique. Par exemple, si vous prenez la première à 128 bits (16 octets) de la sortie de l'algorithme SHA-512 appliquée à une entrée, puis la première à 128 bits sont un hachage cryptographique aussi forte que toute autre de 128 bits de hachage cryptographique.
La solution est de choisir en fonction de hachage cryptographique - SHA-256, SHA-384 et SHA-512 sont de bons choix et tronquer la sortie à 128 bits (16 octets).
--EDIT--
Basé sur le commentaire que la valeur de hachage doit, lorsqu'ils sont encodés en ASCII, s'inscrivent dans 16 ASQUES personnages, la solution est
Vous pouvez facilement utiliser un hachage MD5 pour cela, mais vous allez avoir à modifier la façon dont il est stocké. Un MD5 est de 128 bits, ce qui est généralement affiché 32 4 bits (en hexadécimal) de valeurs. Un char standard est de 8 bits, cependant, jusqu'à 16 caractères est suffisante pour stocker la valeur d'un hachage MD5.
Pour le convertir, essayez les solutions suivantes:
Si vous avez de 16 octets de stockage d'un 128bit nombre n'est pas un problème. Magasin de la 128 bits de la valeur en tant que 16 bits de la valeur au lieu de 32 chaîne de caractères qui est stocké le 16 octets valeur HEX.
Comme une note, j'ai utilisé GUID/UUID champs dans les bases de données pour stocker les hachages MD5. Tout n'est plus cryptographique sécurisé, 128bit hachages MD5 sont très bien pour les Sommes de contrôle (et c'est beaucoup mieux que 64 bits.)
Noter que je ne montre pas le contenu du fichier, car il ya une bonne chance qu'il contient "non imprimables" caractères.
Des commentaires au sujet de ce code? Semble fonctionne bien...
J'ai remarqué cette question est relativement vieux, mais je suis sûr que quelqu'un va trouver cette réponse précieuse.
Ma suggestion serait d'utiliser Blake2b qui a la capacité d'utiliser 8 bits par le biais de 512 bits. Si aucune taille de la clé est utilisée, la valeur par défaut est utilisé "512" dans ce cas. Blake2s valeur par défaut de 256 bits.
Espérons que cette aide!