簡體   English   中英

驗證Java中的Open SSL SHA1哈希

[英]Verify Open SSL SHA1 hash in Java

在我們的項目中,我們使用以下OpenSSL函數創建SHA1哈希,

SHA_CTX ctx;
SHA1_Init (&ctx);
SHA1_Update (&ctx, value, size);
SHA1_Final (returned_hash, &ctx);

我們正在使用一個密鑰,並且多次調用了SHA1_Update。

我必須使用Java驗證該哈希。 我寫了以下函數,

public static Mac hmacSha1Init(String key) {
        Mac mac = null;
        try {
            // Get an hmac_sha1 key from the raw key bytes
            byte[] keyBytes = key.getBytes();
            SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");

            // Get an hmac_sha1 Mac instance and initialize with the signing key
            mac = Mac.getInstance("HmacSHA1");
            mac.init(signingKey);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return mac;
    }

    public static Mac hmacSha1Update(String value, Mac mac) {
        try {
            // update hmac with value
            mac.update(value.getBytes());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return mac;
    }

    public static String hmacSha1Final( Mac mac) {
        try {
            // Compute the hmac on input data bytes
            byte[] rawHmac = mac.doFinal();
            return Base64.encodeBase64String(rawHmac);


        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

我將hmacSha1Init與密鑰配合使用,並在Mac上進行了多次更新,最后在mac上調用了hmacSha1Final。

防爆。

Mac mac =  hmacSha1Init("ssdsdsdioj298932276302392pdsdsfsdfs");


mac = hmacSha1Update("value1", mac);
mac = hmacSha1Update("value2", mac);
mac = hmacSha1Update("value3"', mac);
String hash =  hmacSha1Final(mac);

但是我沒有通過OpenSSL生成相同的SHA1哈希。 網絡上的文檔非常有限。 有人可以指導我嗎

這兩個哈希值不同的原因是,openssl SHA1算法中使用的輸入與Java框架中使用的輸入不同。 如果使用MD5算法,您將看到結果相同。 在這種情況下,openssl使用相同的方法。

有什么變化? 好吧,openssl認為SHA1還不夠安全,還好,所以他們決定再給它一個機會。 通常(MD5和Java框架),使用輸入字符串並為其生成ASN1 DER編碼。 然后,他們將其傳遞給算法。 對於SHA1,openssl在生成ASN1 DER編碼之前先進行規范化。 它正在計算輸入的CANONICAL格式,然后生成ASN1 DER,然后將其傳遞給算法。

您將必須修改Java框架才能獲得相同的結果。 我也想自己做:)

在這里您可以在openssl分發列表中找到有關它的帖子: http : //openssl.6102.n7.nabble.com/The-new-subject-hash-algorithm-td44844.html

這里是ICM Uniwersytet Warszawski的實現。 不確定它的可靠性如何,這就是為什么我要自己嘗試。

https://github.com/eu-emi/canl-java/blob/master/src/main/java/eu/emi/security/authn/x509/helpers/trust/OpensslTruststoreHelper.java

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM