第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java mac sha256 散列與使用 pack 的 php hmac sha256 不匹配?

Java mac sha256 散列與使用 pack 的 php hmac sha256 不匹配?

PHP
繁華開滿天機 2021-06-28 13:43:06
我正在嘗試在 java (android) 中設置一個安全的哈希鍵。它沒有得到與 php 端相同的結果(我用作參考并且它有效)。我經(jīng)歷過很多類似的問題,但是(只有一個,我試過但沒有用)沒有一個沒有解決清楚。這是我測試過的代碼。// php code$secureHash = 'ABCD';$secret = '123AE45F';echo '<br> using pack--';echo hash_hmac('sha256', $secureHash, pack('H*', $secret));echo '<br> without using pack--';echo hash_hmac('sha256', $secureHash, $secret, false);帶包裝的f7a009f2c3e654fa48296917ab6372ecb7aa2a24c43fccb70af743f66b6dba55 結果:不帶包裝的結果:fc602f0f6faf2072be9c0b995ee3d603f61414c4beb027b678c90946db6903a2// Java codeprivate String getHashCode(String message, String secretKey) {    Mac mac;    String result = null;    try {        byte[] byteKey = secretKey.getBytes(StandardCharsets.UTF_8);        final String hmacSHA256 = "HmacSHA256";        mac = Mac.getInstance(hmacSHA256);        SecretKeySpec keySpec = new SecretKeySpec(secretKey.getBytes(), hmacSHA256);        sha256HMAC.init(keySpec);        byte[] mac_data = sha256HMAC.doFinal(message.getBytes(StandardCharsets.UTF_8));        result = bytesToHex(mac_data);        System.out.println("getHashCode: result " + result);    } catch (NoSuchAlgorithmException e) {        e.printStackTrace();    } catch (InvalidKeyException e) {        e.printStackTrace();    }    return result;}在 Java 代碼中,我得到的輸出為 fc602f0f6faf2072be9c0b995ee3d603f61414c4beb027b678c90946db6903a2與沒有包的php代碼相同。如何獲得與 PHP 相同的輸出,即使用pack('H*', $secret)Java 代碼?
查看完整描述

1 回答

?
拉莫斯之舞

TA貢獻1820條經(jīng)驗 獲得超10個贊

而不是密鑰上的string.getBytes java 函數(shù),我使用他的函數(shù)來獲取字節(jié),


    public byte[] hexToString(String hex) {

        // hexToString that works at a byte level, not at character level

        byte[] output = new byte[(hex.length() + 1) / 2];

        for (int i = hex.length() - 1; i >= 0; i -= 2) {

            int from = i - 1;

            if (from < 0) {

                from = 0;

            }

            String str = hex.substring(from, i + 1);

            output[i/2] = (byte)Integer.parseInt(str, 16);

        }

        return output;

    }

現(xiàn)在我得到與 php 端相同的十六進制密鑰。


查看完整回答
反對 回復 2021-07-09
  • 1 回答
  • 0 關注
  • 309 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號