Я немного смущен. Я хочу получить байты строки, которая хешируется с SHA1.Разное в Java SHA1 vs JavaScript SHA1
JavaScript:
var content = "somestring";
console.warn(content.getBytes().toString());
console.warn(CryptoJS.SHA1(content.getBytes().toString()).toString().getBytes());
String.prototype.getBytes = function() {
var bytes = [];
for (var i = 0; i < this.length; i++){
bytes.push(this.charCodeAt(i));
}
return bytes;
};
Array.prototype.toString = function(){
var result = "";
for(var i = 0; i < this.length; i++){
result += this[i].toString();
}
return result;
}
, который дает мне
115111109101115116114105110103
[52, 99, 97, 54, 48, 56, 99, 51, 53, 54, 102, 54, 48, 53, 50, 49, 99, 51, 49, 51, 49, 100, 49, 97, 54, 55, 57, 55, 56, 55, 98, 52, 52, 52, 99, 55, 57, 102, 54, 101]
Java:
String message = "somestring";
byte[] sha1 = MessageDigest.getInstance("SHA1").digest(message.getBytes());
System.out.println(Arrays.toString(message.getBytes()));
System.out.println(Arrays.toString(sha1));
System.out.println(new String(sha1));
, который дает мне
[115, 111, 109, 101, 115, 116, 114, 105, 110, 103]
[-38, 99, -5, 105, -82, -80, 60, 119, 107, -46, 62, -111, -30, -63, -53, 61, -13, 1, 53, -45]
Úcûi®°<wkÒ>‘âÁË=ó5Ó
Первый выход равен JavaScript и Java, но второй отличается. Почему и как возможна контрольная сумма, например Úcûi®°<wkÒ>‘âÁË=ó5Ó
?
Да, я понял это вчера. Проблема в Java - это байт, ограниченный (2^8). 128 - -128, 129 - -127 ... и 255 равно -1. В JavaScript нет этой «проблемы». – Niklas