我正在编写一个包含一些哈希函数的库。
我希望其中一个函数返回散列(byte [])和为散列使用而生成的随机salt(byte [])。什么是最友好,最直观的方式?
我有一个C#版本,通过返回哈希然后将salt作为out参数传回来工作,这完全有效,但是Java并没有给我带来out参数的奢侈。
有什么想法吗?
答案 0 :(得分:8)
最优雅的方法当然是将哈希和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中。
如果你让这些领域成为最终的,有些人甚至可能会争辩说你可以将它们公开并跳过访问方法。
答案 1 :(得分:1)
如果您正在使用Project Lombok,则可以使用@Data
注释创建一个封装hash + salt的值类,Lombok-ifier将自动生成样板代码。
使用final
变量来创建一个不可变的类,你可以节省自己的悲伤。
答案 2 :(得分:0)
一种直接的方法是在结构中包含哈希和salt的小结构。
答案 3 :(得分:0)
您必须创建一个将hash字节[]和salt byte []作为两个实例变量的Object。
类似的东西:
public class HashParams {
public byte hash[];
public byte salt[];
}