2011-06-20 11 views
3

私はいくつかのハッシュ関数を含むライブラリを書いています。Javaで2つの変数を返す最もユーザーフレンドリーな方法は?

ハッシュ(byte [])とそのハッシュで使用するために生成されたランダムなsalt(byte [])を返す関数が必要です。これを行う最もユーザーフレンドリーで直感的な方法は何でしょうか?

私はハッシュを返してから、saltをoutパラメータとして渡して動作するC#バージョンを持っていますが、これは完全に動作しますが、Javaでは出力パラメータが贅沢になりません。

どのような考えですか?

答えて

8

もちろん、最も洗練された方法は、クラスにハッシュとソルトをカプセル化し、このクラスのインスタンスを返すことです。

class HashAndSalt { 
    private byte[] hash, salt; 
    public HashAndSalt(byte[] hash, byte[] salt) { 
     this.hash = hash; 
     this.salt = salt; 
    } 

    // access methods goes here 
} 

上記のアプローチを選択するための主な理由は、それが変数に含まれるものクライアント側に明らかになることです。 byte[2][]のようなものを返した場合は、ハッシュがインデックス0または1であるかどうかを忘れてしまうでしょう。

フィールドを最終的にすると、メソッド。

+0

+1はい。出力パラメータはkludgeです。これははるかに直観的な設計です。 – hoipolloi

0

これを行う簡単な方法は、構造体にハッシュと塩を含む小さな構造体です。

+2

厳密に言えば、Javaには構造体がありません... –

0

ハッシュ・バイト[]とソルト・バイト[]を2つのインスタンス変数として持つオブジェクトを作成する必要があります。

ような何か:

public class HashParams { 
    public byte hash[]; 
    public byte salt[]; 
} 
1

あなたがプロジェクトロンボクを使用している場合は、ハッシュ+塩をカプセル化する値クラスを作成する@Dataアノテーションを使用することができ、およびロンボク-ifierが自動的に定型的なコードを生成します。 。

final変数を使用して不変クラスを作成すると、自分自身の悲しみを節約できます。

関連する問題