Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   sha1 JS не полный (https://javascript.ru/forum/misc/20780-sha1-js-ne-polnyjj.html)

MCTrane 16.08.2011 23:24

sha1 JS не полный
 
Я нашёл функцию sha1 на этом сайте, но там нет второго параметра raw_output, как в php, если этот параметр true, то возвращатся должна двоичная строка в 20 символов. ВОт мне такое на js надо. Никто не знает как это реализуется?Может кто-то в инете находил полную функцию? Или придётся использовать ajax?

B@rmaley.e><e 16.08.2011 23:36

Ну так пройдитесь по возвращаемой строке и каждую пару символов замените на соответствующий символ, считая пару двузначным шестнадцатеричным числом.
Что-то в духе
function raw_sha1(msg){
  return sha1(msg).match(/\w{2}/g).map(function(a){return String.fromCharCode(a)}).join('')
}

MCTrane 17.08.2011 11:05

Странная ошибка возникает:
sha1(msg).match(/\w{2}/g).forEach(function (a) {return String.fromCharCode(a);}) is undefined
Это из-за чего?

B@rmaley.e><e 17.08.2011 11:10

Возможно, из-за того. что я не тестировал этот код и он больше тянет на псевдокод, чем на рабочую реализацию.

Kolyaj 17.08.2011 11:12

Цитата:

Сообщение от MCTrane
Это из-за чего?

не нашлось совпадений регулярному выражению.

MCTrane 17.08.2011 11:49

B@rmaley.e><e, я так понимаю ваш код каждые 2 символа пропускает через String.fromCharCode? Я попробывал сделать в ручную. Пропустил через неё первые 2 символа sha1 вывело Q, а в php выводит Ѓ. Или я не правильно вас понял, или этот метод не подходит(?

MCTrane 17.08.2011 12:05

Kolyaj, Не думаю. Регулярное выражение правильное и должно в этой строке найти. Даже при /\S*/ показывает туже ошибку. А S - это любой символ, кроме пробела. А пробелу там неоткуда взятся.

Kolyaj 17.08.2011 12:10

А, тут не forEach нужен, а map.

MCTrane 17.08.2011 12:19

Kolyaj,
Так всё работает, но шифрует не так, как php. А нужно, чтобы было идентично.
JS: QW9*9TIR[
PHP: Ѓю‹ю‡Wl>Л"BoЋW„s‚‘zП
Я уже и на иностранных сайтах был, там тоже ничего не нашёл(

MCTrane 17.08.2011 13:34

В общем ответы все нашёл на прекрасном сайте
http://phpjs.org/
Мне просто нужно было полученную двочную строку через base64 пропустить ещё. И вот там я нашёл функцию b64_sha1() и она идентична php base64_encode(sha1("",1))


Часовой пояс GMT +3, время: 06:12.