2011-06-20 48 views
3

我在寫一個包含一些散列函數的庫。在Java中傳遞兩個變量的用戶友好方式最多?

我想要其中的一個函數返回散列值(hash [])和隨機salt(byte []),它是爲散列值使用而生成的。什麼是用戶最友好和直觀的方式呢?

我有一個C#版本的這個工作,通過返回哈希,然後傳回鹽作爲一個輸出參數,它完美的工作,但Java不給我的輸出參數的豪華。

有什麼想法?

回答

8

最優雅的方式當然是將hash和salt封裝在一個類中並返回該類的一個實例。

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中。

如果你使字段最終,有些人甚至可能會爭辯說,你可以讓它們公開並跳過access-方法。

+0

+1是的。 Out參數是一個kludge。這是一個更直觀的設計。 – hoipolloi

0

這樣做的直接方法是在結構中包含散列和鹽的小結構。

+2

嚴格來說,Java中沒有任何結構... –

0

你將不得不創建一個哈希byte []和salt byte []作爲兩個實例變量的Object。

喜歡的東西:

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

如果你使用的項目龍目島,你可以使用@Data註解來創建一個封裝哈希+鹽值類,和龍目-ifier將自動生成樣板代碼。

使用final變量來創建一個不可變的類,並且您將保存自己的悲傷。