Облицовка проблемы при создании SHA1 из javascript и java. Проблема в том, что они разные. Он используется для проверки запроса клиента на веб-сервер. Это означает, что клиент отправляет закодированный ключ безопасности на основе 64 на сервер и сервер, регенерирует один и тот же ключ и приравнивает оба значения. Ниже приведен код создания секретных ключей на клиенте и сервере. СерверSHA1 различается в java и javascript для того же входа
MessageDigest mDigest = null;
try {
mDigest = MessageDigest.getInstance("SHA1");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
String input = value1 + value1 + server_key;
byte[] result = mDigest.digest(input.getBytes());
String secret = Base64.encodeToString(result, Base64.NO_WRAP);
...
//comparison logic goes here
...
Client (Java Script)
var input = value1 + value2 + server_key;
//http://code.google.com/p/crypto-js/
var hash = CryptoJS.SHA1(input);
var encoded = base64Encode(hash.toString());
//WEB SERVICE INVOCATION FROM JAVASCRIPT GIES HERE.
Значения value1, value1, server_key будет доступен в клиенте и на сервере. Проблема, с которой мы сталкиваемся, заключается в том, что SHA1, сгенерированный как на клиенте, так и на сервере, не соответствует. Я понимаю, что проблема в java заключается в использовании getBytes() и в javascript с использованием строкового значения для генерации SHA1. CryptoJS.SHA1 не поддерживает bytearray как параметр. Мы не можем изменить код сервера, поскольку он используется многими клиентскими приложениями. Любая помощь будет высоко ценится.
В Java ->
byte[] result = mDigest.digest(input.getBytes());
и в JavaScript ->
var hash = CryptoJS.SHA1(input);.
Я вера это проблема. В java параметр является bytearray, а output также является bytearray. Но в javascript параметр var (string), а return также var (string). Я также сравнивал вывод CryptoJS.SHA1 с некоторыми инструментами генерации SHA1 в Интернете. Сравнение верно. Я не эксперт в этой области. Если вы можете объяснить больше, это будет более полезно.
Это может помочь: http://stackoverflow.com/questions/4895523/java-string-to-sha1. Javascript sha1 и sha1 одной строки в командной строке «echo -n» value1value2server_key «| openssl sha1» соответствуют. –
Ссылка, которую вы указали, объясняет проблему в коде Java. Но для меня я хорошо разбираюсь в Java-коде. Я сталкиваюсь с проблемой с кодом Javascript. – user867662
В javascript-коде hash.toString() равно sha1, сгенерированному в командной строке, с использованием метода «openssl sha1» выше. Ваш метод Java не подходит, потому что результаты из javascript и командной строки находятся в шестнадцатеричном формате. В приведенной ссылке дается простое решение. –