C#: Comment générer de courte MD5 code?
Quand je suis chiffrement 23
utilisant le chiffrement MD5, je suis 37693cfc748049e45d87b8c7d8b9aacd
ce de 32 caractères de long chaîne de caractères qui sera toujours statique pour 23.
Je veux le même genre de mécanisme, mais qui devrait générer de 18 ans ou moins (comme: 122ff1e4883358b6
) caractères chaîne de caractères au lieu de 32.
Comment je peux le faire en C#, est-il une version plus courte de MD5 en c#??
- MD5 n'est pas le cryptage, c'est un algorithme de hachage. Il y a une grande différence entre les deux; le plus important, le hachage ne peut pas être inversée, à la différence de chiffrement, en raison des multiples entrées donnera le même résultat.
- Salut, Prashant. Je vois votre nouveau commentaire sur l'utilisation de la chaîne dans une URL. Je ne peux penser à quelques approches pour faire ce travail à nouveau, mais peut-être que nous serions en mesure de donner une réponse adaptée à votre problème si vous élargi sur quels types d'intrants vous vous attendez à avoir, exactement pourquoi vous faites un hachage MD5, et ce que vous voulez accomplir avec l'URL à la fin. Ce qui nous permet de court-circuiter les objections que vous pourriez avoir avec de nouvelles solutions, ou peut-être même suggérer une autre approche, à l'instar de @tvanfosson Parfaite de la Fonction de Hachage idée.
- Salut @Blair: en Fait, il n'y a rien de spécial à faire de l'URL comme ça, je suis juste inspiré par message GMAIL URL, ils font comme:
http://mail.google.com/mail/?shva=1#inbox/14461a1185905642
et c'est bien parce que sur connecté, l'utilisateur peut voir il y a des messages, de la même façon dans mon appli, seuls les utilisateurs enregistrés sont autorisés à effectuer toute activité. Donc au lieu de donner des URL de ce type:http://examle.com/mail/18/
je wantto faire commehttp://examle.com/mail/14461a1185905642/
. - ... C'est pourquoi j'ai besoin de quelques bonnes de la fonction de chiffrement ou de la technique qui ne manquera pas, en aucune façon, et produira en sortie comme google de faire, pas de caractères spéciaux uniquement des chiffres et des lettres.
Vous devez vous connecter pour publier un commentaire.
J'aime @RichieHindle de réponse. Toutefois, si vous êtes intéressé à en perdre le moins de bits de fidélité (et en diminuant ainsi le risque de collisions), vous pourriez prendre la 128 bits de la valeur retournée par le Hachage MD5, et de l'encoder à l'aide de ASCII85 (aussi connu comme Base85 encodage), au lieu de hexadécimale de la base de l'encodage. Cela vous donnera l'ensemble de hachage de 20 octets (ce qui est plus que ce que vous vouliez, mais vous pouvez hacher 2 octets, ce qui provoque beaucoup moins de perte que de supprimer 14 de 32 octets, vous obtiendrez à l'aide de codage hexadécimal).
Edit: Prashant dit 20 caractères est assez proche, et a demandé un exemple de code:
Après l'obtention d'un hachage MD5 du MD5.ComputeHash appel, vous pouvez utiliser Jeff Atwood est ASCII85 codeur:
Rendements
de sorte que vous pouvez simplement utiliser
hash85
. Leencoder.EnforceMarks
permet de s'assurer que le codage ne comprend pas certaines des préfixes et des suffixes qui sont associés avec ASCII85.mail.google.com/mail/?zx=1xjighs8u7ewc&shva=1#inbox/1230e772c539f5e3
. Si je vais passer ? ou & dans l'url alors qui va créer le problème. Ne peut-on pas supprimer les caractères spéciaux de la production finale afin de générer une sortie quelque chose comme "1230f774c459b5f3" (sans caractères spéciaux ??Il vous suffit de prendre autant de hachage MD5 que vous en avez besoin, et jeter le reste. Tous les bits ont la même valeur, donc il n'y a pas de différence entre le faire et l'utilisation de certains algorithme de hachage nativement produit moins de bits.
(Si vous êtes en train de faire ce pour des raisons de sécurité, n'oubliez pas que moins de bits permet de hachages plus facile à casser, indépendamment de l'algorithme. Même en dehors des applications de sécurité, moins de bits augmenter le risque de collisions. Aussi garder à l'esprit que MD5 est relative insécurité ces jours - SHA-1 ou SHA-2 sont considérés comme plus sûrs.)
37693cfc748049e45d87b8c7d8b9aacd
, mais ne peut pas le poing 18 caractères dans un MD5 être de même pour d'autres cordes??MD5 crée toujours un de Hachage de 128 Bits.
D'autres petits Hashtypes (tiré de Wikipédia)
Fowler-Noll-Vo fonction de hachage (32, 64, 128, 256, 512, ou 1024 bits)
Jenkins fonction de hachage (32 bits)
MurmurHash (32 ou 64 bits)
Pearson de hachage (8 bits)
Mais n'oubliez pas les collisions de hachage
Je ne voudrais pas utiliser une fonction de hachage si vous voulez être en mesure de cartographier le résultat revient à sa valeur d'origine sans collisions.
Si votre but est de transformer un petit nombre décimal en une longue chaîne d'obfuscation, juste en inventer algorithme de cartographie et d'encoder le résultat avec zBase32 ou similaire.
23
encodés à"gmuyaiayyyyyy"
. (63498398 choisi par juste lancer de dés.)Utilisation FVNHash - http://www.codeproject.com/KB/security/FnvHash.aspx
Vous pouvez régler la longueur de votre table de hachage, ne pas utiliser pour des raisons de sécurité.
plus brefs utile algorithme de hachage serait md5 . génère 16 octets=128 bits de hachage. si vous utilisez le codage en base 64 ...c'est utile 6 bits par octet/char.
u devrait être en mesure de réduire le md5 de 22 caractères (ascii). ce que vous avez est hex version où 2 octets représentent une réelle octet
(en laissant le remplissage à droite introduite par b64)
avec un avantage supplémentaire de l'utilisation de la même juridique pour les noms de fichiers. (bien sûr u vont devoir remplacer la valeur par défaut /et + caractères avec n'importe quel autre symbole qui ne sont pas en conflit avec la convention de nommage des fichiers de votre système d'exploitation.
base64 (en remplaçant /et +) assure votre hash n'est pas en désordre les url avec des caractères spéciaux, ce qui peut signifier quelque chose d'autre à votre serveur web
md5 ('Cette chaîne sera haché')
'37aa3296c523f6c5a7fd2102a9155dcc' (hex) (32 octets)
raw md5 ('Cette chaîne sera haché')
[55, 170, 50, 150, 197, 35, 246, 197, 167, 253, 33, 2, 169, 21, 93, 204] = (16 Octets)
base64 de raw md5 de la chaîne
N6oylsUj9sWn_SECqRVdzA==
Mes Finale De Hachage
N6oylsUj9sWn_SECqRVdzA c'est en fait le complet md5 dans 22 caractères ascii
([vous pouvez enlever les deux de fuite = il y aura toujours deux md5-ajouter plus tard lors du décodage. également remplacer + et /caractères dans b64 avec tout les autres je préfère -(tiret) et _ (trait de soulignement) ]
ce de 32 caractères de long de la chaîne sont nombre de hexadécimale : 0-f
vous pouvez faire plus court par la conversion de sa valeur hexadécimale à base de 36 : 0-z