Эти два кода дадут вам одинаковый вывод
NodeJS
var data = "seed";
var crypto = require('crypto');
crypto.createHash('sha256').update(data).digest("hex");
Java
import java.security.MessageDigest;
public class SHAHashingExample
{
public static void main(String[] args)throws Exception
{
String password = "seed";
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(password.getBytes());
byte byteData[] = md.digest();
//convert the byte to hex format method 1
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
System.out.println("Hex format : " + sb.toString());
//convert the byte to hex format method 2
StringBuffer hexString = new StringBuffer();
for (int i=0;i<byteData.length;i++) {
String hex=Integer.toHexString(0xff & byteData[i]);
if(hex.length()==1) hexString.append('0');
hexString.append(hex);
}
System.out.println("Hex format : " + hexString.toString());
}
}
Для более подробной информации:
NodeJS ссылка Java-ссылка
Как указали другие, вопрос состоит в том, как вы представляете данные.Если в функции update
вы ничего не указываете - как в решении, которое я дал выше - вы говорите, что интерпретируйте seed
как закодированный с кодировкой UTF-8 по умолчанию.Каков перевод строки UTF-8 seed
в шестнадцатеричном формате?ответ 73656564
, как вы можете легко проверить, например, из этого онлайн-инструмента
Теперь давайте проверим.Давайте напишем:
NodeJS
var data = "73656564";
crypto.createHash('sha256').update(data, 'hex').digest('hex');
Вы также получите тот же результат.Вы сообщаете функции update
, что данные, которые вы предоставляете, представляют собой представление hex
и должны интерпретироваться как таковые
Надеюсь, это поможет прояснить роль hex