3

我正在编写一个包含一些哈希函数的库。

我希望其中一个函数返回散列(byte[])和生成用于散列的随机盐(byte[])。最用户友好、最直观的方式是什么?

我有一个 C# 版本,它通过返回散列然后将盐作为输出参数传回,效果很好,但是 Java 并没有给我输出参数的奢侈。

有什么想法吗?

4

4 回答 4

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][]I for one 的内容,则会一直忘记哈希是在索引 0 还是 1 中。

如果您将字段设置为最终字段,有些人甚至可能会争辩说您可以将它们公开并跳过访问方法。

于 2011-06-20T20:35:07.483 回答
1

如果您使用的是 Lombok 项目,您可以使用@Data注解创建一个封装了 hash + salt 的值类,Lombok-ifier 会自动生成样板代码。

使用final变量来创建一个不可变的类,你会省去烦恼。

于 2011-06-20T20:38:22.967 回答
0

一种直接的方法是在结构中包含哈希和盐的小结构。

于 2011-06-20T20:36:00.477 回答
0

您必须创建一个 Object,其中包含 hash byte[] 和 salt byte[] 作为两个实例变量。

就像是:

public class HashParams {
  public byte hash[];
  public byte salt[];
}
于 2011-06-20T20:36:26.840 回答