6

SorunNeden crypto.createHash yeni sürümde farklı çıktılar veriyor?

Ben md5 hash oluşturmak crypto.createHash kullanıyor node.js modülü var.

Kod

require('crypto').createHash('md5').update('¥').digest('hex') 

node.js v0.10.0

Çıkışlar: ab3af8566ddd20d7efc9b314abe90755

Son zamanlarda crypto modülü tarafından oluşturulan karma yeni sürümlerinde farklı olduğunu fark

node.js v6.1.0

Çıkışlar: 07625e142e4ac5961de57472657a88c1

Soru

ne yeni versiyonunda bunu nasıl çözebilir ve bu nedenleri merak ediyorum? GitHub üzerinde

Güncelleme

Benzer sorunlar: Düğüm v6 + içinde

cevap

17

Bazı girişler önceki Düğüm sürümlerinden farklı karma hesaplayın. Düğüm versiyonlarıyla, .update() bir dize geçerken

Temelde, v6 önce varsayılan kodlama binary, ama Düğüm v6 için utf-8 için değişti. çıkış öncesi 6 sürümleri ile aynı etmek isterseniz Düğüm 6

require('crypto').createHash('md5').update('¥').digest('hex') 

Bu Düğüm 6.

tarihinde Düğümünde ab3af8566ddd20d7efc9b314abe90755 öncesi 6 ve 07625e142e4ac5961de57472657a88c1 çıkarır:

Örneğin, bu kodu almak , sen binary kodlamayı kullanmak .update() anlatmak zorunda:

require('crypto').createHash('md5').update('¥', 'binary').digest('hex') 

Ya tersi (Düğüm önceden 6 çıkış yapmak Aynı) 6 olarak:

require('crypto').createHash('md5').update('¥', 'utf-8').digest('hex') 
+0

Are oldu hazımlarıyla için varsayılan kodlama hakkındadır Bu kodlamalar (ikili/utf-8) in-char bayt sırasına göre değişir? –

+1

@vp_arth çok fazla byte _order_, ancak baytlarla temsil edilme şekli farklıdır. Ben "ikili" nin Latince-1 kodlaması olduğuna inanıyorum (bu, temsil edebilecek karakter sayısında sınırlıdır, bu yüzden varsayılanın Node v6 için "utf-8" olarak değiştirilmesinin nedeni sanırım). – robertklep