Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.08.2011, 23:24
Аватар для MCTrane
Профессор
Отправить личное сообщение для MCTrane Посмотреть профиль Найти все сообщения от MCTrane
 
Регистрация: 26.11.2009
Сообщений: 204

sha1 JS не полный
Я нашёл функцию sha1 на этом сайте, но там нет второго параметра raw_output, как в php, если этот параметр true, то возвращатся должна двоичная строка в 20 символов. ВОт мне такое на js надо. Никто не знает как это реализуется?Может кто-то в инете находил полную функцию? Или придётся использовать ajax?
Ответить с цитированием
  #2 (permalink)  
Старый 16.08.2011, 23:36
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

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

Последний раз редактировалось B@rmaley.e><e, 17.08.2011 в 13:56. Причина: заменил forEach на map
Ответить с цитированием
  #3 (permalink)  
Старый 17.08.2011, 11:05
Аватар для MCTrane
Профессор
Отправить личное сообщение для MCTrane Посмотреть профиль Найти все сообщения от MCTrane
 
Регистрация: 26.11.2009
Сообщений: 204

Странная ошибка возникает:
sha1(msg).match(/\w{2}/g).forEach(function (a) {return String.fromCharCode(a);}) is undefined
Это из-за чего?
Ответить с цитированием
  #4 (permalink)  
Старый 17.08.2011, 11:10
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Возможно, из-за того. что я не тестировал этот код и он больше тянет на псевдокод, чем на рабочую реализацию.
Ответить с цитированием
  #5 (permalink)  
Старый 17.08.2011, 11:12
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от MCTrane
Это из-за чего?
не нашлось совпадений регулярному выражению.
Ответить с цитированием
  #6 (permalink)  
Старый 17.08.2011, 11:49
Аватар для MCTrane
Профессор
Отправить личное сообщение для MCTrane Посмотреть профиль Найти все сообщения от MCTrane
 
Регистрация: 26.11.2009
Сообщений: 204

B@rmaley.e><e, я так понимаю ваш код каждые 2 символа пропускает через String.fromCharCode? Я попробывал сделать в ручную. Пропустил через неё первые 2 символа sha1 вывело Q, а в php выводит Ѓ. Или я не правильно вас понял, или этот метод не подходит(?
Ответить с цитированием
  #7 (permalink)  
Старый 17.08.2011, 12:05
Аватар для MCTrane
Профессор
Отправить личное сообщение для MCTrane Посмотреть профиль Найти все сообщения от MCTrane
 
Регистрация: 26.11.2009
Сообщений: 204

Kolyaj, Не думаю. Регулярное выражение правильное и должно в этой строке найти. Даже при /\S*/ показывает туже ошибку. А S - это любой символ, кроме пробела. А пробелу там неоткуда взятся.
Ответить с цитированием
  #8 (permalink)  
Старый 17.08.2011, 12:10
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

А, тут не forEach нужен, а map.
Ответить с цитированием
  #9 (permalink)  
Старый 17.08.2011, 12:19
Аватар для MCTrane
Профессор
Отправить личное сообщение для MCTrane Посмотреть профиль Найти все сообщения от MCTrane
 
Регистрация: 26.11.2009
Сообщений: 204

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

Последний раз редактировалось MCTrane, 17.08.2011 в 12:21.
Ответить с цитированием
  #10 (permalink)  
Старый 17.08.2011, 13:34
Аватар для MCTrane
Профессор
Отправить личное сообщение для MCTrane Посмотреть профиль Найти все сообщения от MCTrane
 
Регистрация: 26.11.2009
Сообщений: 204

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Срочно JS developer okp Работа 7 14.06.2011 14:54
Не получается передать переменную из JS в PHP Lion_astana AJAX и COMET 2 23.11.2010 17:23
помогите задать переменную в js bsgroupua Общие вопросы Javascript 3 01.02.2010 18:28
Html метки + div + JS boltayka Events/DOM/Window 1 07.09.2009 17:21
Самая лучшая книга по JS? ulandj Оффтопик 2 06.04.2009 11:35