2017-11-27 1 views
0

Webサービスからオブジェクトのフローを受け取ります。クライアントからの制限は、これらのオブジェクトをデータベースに保存すべきではないということです。この場合、将来の識別目的のために各オブジェクトの独自のIDを作成する必要があります。文字列のDIGITALハッシュを作成します。 Java

SHA256アルゴリズムを使用して、オブジェクトの属性の連結に基づいてハッシュを作成する方法の1つです。 だからハッシュは、このようなことがあります

07993ae34bf09e0afdfac7dd728b326095dcf4f68fa1d09e2e8cfb57f214bc5d

しかし、私はが唯一のデジタルID S(ロングタイプ)を受け付け、外部クライアントシステムで動作します。

文字列からデジタルハッシュを作成する方法やアルゴリズムはありますか?

P.S.追加。私が最後に必要とするのは、オブジェクトのLong型のIDを受け取ることです。しかし、それらをデータベースに保存することなく、それらの属性の連結にのみ基づいています。私は、ハッシュを作成することについては、数字だけから構成され、Long型に適用されると考えています。しかし、クリーバーの方法があれば、私はそれを感謝するでしょう。ここでは、ハッシュからロング番号を受け取るために

+3

私は「デジタルハッシュ」は何を意味するのかわかりません。しかし、単に「長さに合ったハッシュ」を意味するのであれば、例えば、 SHA256は64ビット(16桁の16進数)になります。 –

+0

@Kirill私が間違っていなければ、ハッシュからid(long型)を返すだろうか? – Vanguard

+0

@OliverCharlesworthご意見ありがとうございます。 SHA256のハッシュが何らかの形でLong型に変換される可能性があることを正しく理解できますか?もしそうなら、あなたはこれを答えに記述することに感謝します。 –

答えて

0

は次の関数である:

private Long createId(String name) throws Exception { 
    Long id = new BigInteger(getHash(name), 16).longValue(); 

    return id; 
} 

だけハッシュが作成される方法を示すこと:

import org.apache.commons.codec.binary.Hex; 
import javax.crypto.Mac; 
import javax.crypto.spec.SecretKeySpec; 

private String getHash(String s) throws Exception { 

    Mac mac = Mac.getInstance("HMACSHA256"); 
    mac.init(new SecretKeySpec("Password".getBytes("UTF-8"), "")); 

    byte[] ret = mac.doFinal(s.getBytes("UTF-8")); 

    return Hex.encodeHexString(ret); 
} 
関連する問題