Мне нужно скопировать javascript sha256 га sh в java в моем приложении Groovy / java.
В версии javascript используется функция ha sh, включенная в angular, и я не могу ее контролировать. Учитывая одинаковые входные строки, мне нужно предоставить одинаковый шестнадцатеричный вывод.
В java, я использую https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/DigestUtils.html
В java:
DigestUtils.sha256(cx2 + username):
дает мне что-то, что печатается как:
[- 114, -15, 57, -56, 81, 37, -95, 119, 102, 81, 63, 99, -3, -56, -116, -110, -114, -16, -18, 117, 118, 49, -120, 14, 68, 30, -37, 20, -70, -17 , -19, -88]
В сценарии java:
var s1 = Sha256.hash(cx2 + username)
дает мне строку байтов (тип Javascript скажет, что это строка), что-то, что печатается как показано ниже (не уверен, что это за кодировка):
ñ9ÈQ% ¡wfQ? cýÈðîuv1DÛºïí¨
Если я конвертирую обе строки байтов в Hex, я получаю одинаковый результат как в java и javascript:
console.log Sha256.toHexStrfromByteStr(s1)
// 478972ab3380187060494987ac7c597ac92decdac1c04dd1dcab8184995ec01b
Это было бы так, за исключением того, что код javascript делает секунду га sh, объединяя байтовую строку с другой строкой:
var s2 = Sha256.hash(cx1 + s1)
Когда Я пытаюсь повторить второй ха sh в Java, я получаю очень разные выходные данные (после преобразования обоих выходов в него x).
def s2 = DigestUtils.sha256(cx1 + s1)
Есть ли шаг, который я пропускаю?
import org.apache.commons.codec.digest.DigestUtils
String cx2 = 'Potato'
String cx1 = 'Bread'
def s1 = DigestUtils.sha256(cx2 + 'username')
def s2 = DigestUtils.sha256Hex(cx1 + s1)
println s2
Javascript
var s1 = Sha256.hash(cx2 + 'username');
var s2 = Sha256.hash(cx1 + s1);
console.log (Sha256.toHexStrfromByteStr(s2))
Спасибо миллион!