Форум программистов, компьютерный форум, киберфорум
PHP: Laravel
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622

Аналог digest() Java в PHP Laravel

26.07.2022, 09:55. Показов 508. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В Java имеется код для вычисления digest
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
       String in = "abcdef12345";
        String salt = "test";
 
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            byte[] saltD = md.digest((in + salt).getBytes());
            md.update(saltD);
 
            String out1 = Base64.getEncoder().encodeToString(saltD);
            String out2 = Base64.getEncoder().encodeToString(md.digest());
 
            System.out.println("Calculated: " + out1);
            System.out.println("Calculated: " + out2);
 
        } catch(java.security.NoSuchAlgorithmException e) {
            System.err.println("SHA-256 is not a valid message digest algorithm. " + e.toString());
        }
В PHP Laravel пытаюсь повторить то же самое так:
PHP
1
2
3
4
5
        $in = 'abcdef12345';
        $salt = 'test';
 
        $outTemp = hash('sha256', $in.$salt, true);
        $out1 = base64_encode($outTemp);
Результат out1 в обеих случаях совпадает.
Подскажите пожалуйста как в PHP Laravel повторить String out2 = Base64.getEncoder().encodeToString(md.di gest());?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.07.2022, 09:55
Ответы с готовыми решениями:

Аналог indexOf (Java) в php
Существует ли в php аналог indexOf? indexOf - функция ищущая в строке указанную подстроку и возвращающая её положение. String...

Java аналог функции file_get_contents() (PHP)
На PHP часто приходилось применять функцию file_get_contents() которая помещала, например участок HTML страницы в переменную-буфер. Затем...

Аналог PHP функции unpack в Java
Здравствуйте!Подскажите, пожалуйста ,есть ли в Java какой-либо аналог функции unpack (по шаблону "f3") из php? Если не...

4
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
26.07.2022, 14:00
PHP
1
$out2 = base64_encode(hash('sha256', $outTemp, true));
1
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
27.07.2022, 08:55  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
PHP
1
$out2 = base64_encode(hash('sha256', $outTemp, true));
Спасибо. Работает.

Добавлено через 1 час 5 минут
По ходу необходимо полностью повторить Java код на PHP Laravel
Основное из кода это вычисление String mac = getMac(httpMethod, methodUrl, username, password, payload);
Java:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
    /**
     * Calculates message digest salt from the given parameters.
     *
     * @param httpMethod
     *            HTTP method (POST, GET, UPDATE, DELETE...)
     * @param methodUri
     *            Web Service method URI. This is the part of the URI behind the server name and port.
     * @param username
     *            assigned web service user name
     * @param password
     *            assigned web service password
     * @return byte array used to initialize the SHA-256 digester
     */
    protected static byte[] getSalt(String httpMethod, String methodUri, String username,
                                    String password) {
        String str = httpMethod + "\n" + methodUri + "\n" + username + "\n" + password;
        return str.getBytes(UTF8);
    }
 
    /**
     * Calculates message MAC.
     *
     * @param httpMethod
     *            HTTP method (POST, GET, UPDATE, DELETE...)
     * @param methodUrl
     *            Full method URL
     * @param username
     *            assigned web service user name
     * @param password
     *            assigned web service password
     * @param payload
     *            message body
     * @return Base64 encoded message MAC
     */
    public static String getMac(String httpMethod, URL methodUrl, String username, String password,
                                String payload) {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            byte[] salt = getSalt(httpMethod, methodUrl.getPath(), username, password);
            md.update(salt);
 
            if (payload != null)
                md.update(payload.getBytes());
 
            return Base64.getEncoder().encodeToString(md.digest());
 
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
  
    @RequestMapping(value = {"/emis" }, method = RequestMethod.GET)
    public String store(ModelMap model) {
 
        String httpMethod = "POST";
        String methodUri = "https://emis.md/";
        URL  methodUrl = null;
        try {
            methodUrl = new URL("https://emis.md/batch/json/echo");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        String username = "DS!AUTHTUTORIAL";
        String password = "EP123";
        String payload = "{\"value\" : \"Hello, World!\"}";
 
        [B]String mac = getMac(httpMethod, methodUrl, username, password, payload);[/B]
 
        return "admin/emis/index";
    }
PHP Laravel:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
    public function getSalt(String $httpMethod, String $methodUri, String $username,
                                      String $password)
    {
        $str = $httpMethod . "\n" . $methodUri . "\n" . $username . "\n" . $password;
        $text = utf8_encode($str);
 
        return $text;
    }
 
    public function getMac(String $httpMethod, $methodUrl, String $username, String $password,
                                   String $payload) {
 
        $salt = $this->getSalt($httpMethod, $methodUrl, $username, $password);
        $md = hash('sha256', $salt, true);
 
      if ($payload != null) {
          $ctx = hash_init('sha256');
          hash_update($ctx, $payload);
      }
 
      return base64_encode(hash('sha256', $md, true));
  }
 
    public function store(Request $request)
    {
 
        $httpMethod = "POST";
        $methodUri = "https://emis.md/";
        $methodUrl = new URL("https://emis.md/batch/json/echo");
        $username = "DS!AUTHTUTORIAL";
        $password = "EP123";
        $payload = "{\"value\" : \"Hello, World!\"}";
 
        [B]$mac = $this->getMac($httpMethod, $methodUrl, $username, $password, $payload);[/B]
 
        return view('admin.emis.index');
    }
Главная задача это повторить на PHP Larvel вычисление mac.
По факту вычисление на PHP Larvel не соответствует вычислению на Java.
Похоже, что я не верно понял как повторить участок
Java
1
2
3
4
            md.update(salt);
 
            if (payload != null)
                md.update(payload.getBytes());
Подскажите пожалуйста как правильно повторить на PHP Laravel этот участок кода?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
27.07.2022, 12:10
VlGuvin, какой результат выдаёт код на Java? Чтобы я сравнить мог, если вариант ниже даст неверный результат.
Предварительный вариант таков:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
public function getMac(string $httpMethod, $methodUrl, string $username, string $password, ?string $payload)
{
    $md = hash_init('sha256');
    
    hash_update($md, $this->getSalt($httpMethod, $methodUrl, $username, $password));
 
    if ($payload !== null) {
        hash_update($md, $payload);
    }
 
    return base64_encode(hash_final($md, true));
}
1
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
28.07.2022, 00:10  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
какой результат выдаёт код на Java?
Java
1
String mac = getMac(httpMethod, methodUrl, username, password, payload);
C2iMOfJdovKfQ7a/o7TkAK7e2Eb+3Y+Pm2AJt5U52bI=
Но я похоже неверно повторил исходные данные $methodUrl для PHP Laravel.
PHP
1
$methodUrl = new URL("https://emis.md/batch/json/echo");
Кроме того не уверен, что
PHP
1
$this->getSalt($httpMethod, $methodUrl, $username, $password)
соответствует
Java
1
byte[] salt = getSalt(httpMethod, methodUrl.getPath(), username, password);
В связи с этим
PHP
1
$methodUrl = "/batch/json/echo";
И тогда все получается верно.
На выходе PHP Laravel тоже будет
C2iMOfJdovKfQ7a/o7TkAK7e2Eb+3Y+Pm2AJt5U52bI=

Спасибо Вам большое за подсказку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.07.2022, 00:10
Помогаю со студенческими работами здесь

Java http-авторизация Digest и передача по SOAP
Доброго дня, коллеги! Искал-искал.. Так и не нашёл простого примера авторизации digest в Java.. Поэтому обращаюсь к вам) В...

Php/html и basic digest auth
Для удобства сделал себе инструмент на php, суть: вход в один из многих веб-морд оборудования по одной кнопке, с передачей имени и пароля...

Как задеплоить приложение PHP Laravel с использованием php deployer?
Я вообще не особо что-либо понимаю в linux и ОС в принципе, но решил попробовать работать с сервером через деплой. Проблема появилась...

Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
Приветствую форумчане! У меня возникла проблема, когда я запускаю в командной строке jar файл собранный в Maven в IteilliJ IDEA: ...

Аналог MoveNext на Java. Перевод программы с C# на Java
Написала программу на C#. Перевожу ее на Java. Проблема возникла в переводе нижеследующего куска программы. В связи с крайне слабым знанием...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru