2017-01-22 4 views
1

Ich möchte eine Hash-Code-Lösung auf meiner Webseite anwenden, die kompakter ist als MD5 und SHA-1, weil ich sie als Schlüssel in einer JSON-Hash-Tabelle verwenden möchte.Hash-Code, der mehr als 16 Zeichen enthält?

Oder äquivalent: Wie kann ich einen hexadezimalen MD5-Hash zu einem höheren Basiszahlsystem konvertieren? Je höher desto besser, bis die Wörter als Schlüssel in einem JSON-Hash verwendet werden können. Zum Beispiel statt:

"684591beaa2c8e2438be48524f555141" hexadecimal MD5 hash I would prefer "668e15r60463kya64xq7umloh" which is a base 36 number and the values are equal. 

machte ich die Berechnung in Ruby:

"684591beaa2c8e2438be48524f555141".to_i(16).to_s(36) 
=> 668e15r60463kya64xq7umloh 

Weil es die große Dezimalwert der hexadezimalen MD5-Hash-Griffe (138600936100279876740703998180777611585)

Im Gegensatz zu JavaScript, um in JavaScript Ich bekomme einen Gleitkommawert, der abgerundet ist. Also bekomme ich den gleichen 36-Base-Wert für verschiedene MD5-Hashes.

Antwort

0

Rubin

Sie könnten base64digest direkt zurück:

require 'digest' 

Digest::MD5.hexdigest 'your_page' 
#=> "a6b580481008e60df9350de170b7e728" 

p Digest::MD5.base64digest 'your_page' 
#=> "prWASBAI5g35NQ3hcLfnKA==" 

Javascript

Wenn Sie bereits einen Hex-String haben, einen Kommentar von diesem previous answer scheint gut zu funktionieren:

btoa("a6b580481008e60df9350de170b7e728".match(/\w{2}/g).map(function(a){return String.fromCharCode(parseInt(a, 16));}).join("")) 
#=> "prWASBAI5g35NQ3hcLfnKA==" 
+0

Ich sehe, aber ich möchte die Berechnung auf einer Webseite mit erreichen JavaScript. – Konstantin

+0

Ich war mir nicht sicher, da du Ruby markiert und Ruby-Code angezeigt hast. –

+0

Thx, das ist, was ich will, ich habe bereits eine md5.js-Bibliothek, um die MD5-Hashes zu berechnen. – Konstantin

Verwandte Themen