使用 Java 库生成 key 时,我对 Key Material 是什么感到困惑,
根据 SecretKeySpec 文档,
public byte[] getEncoded()
Returns the key material of this secret key.
关键 Material 到底是什么? ,因为如果我尝试打印这样的任何键,
System.out.print(secretKey.getEncoded())
我得到奇怪的输出,例如,
s[B@541187f9
但是当我使用任何编码方案(例如 Base64、Base16)打印它时,我得到了实际的 key 。
谁能解释一下关键 Material 到底是什么?
最佳答案
SecretKeySpec 用于对称算法。这些算法只有一个 key ,即一位字符串。在 Java 中,它表示为字节数组 (byte[]
)。非对称算法 key 的编码为different .
byte[] keyBytes = /* set the key somehow */;
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
Arrays.equals(keyBytes, keySpec.getEncoded()); // true
至于“奇怪”的输出,数组在 Java 中不可打印,因此仅打印引用。如果您甚至想专门打印 byte[]
这也不起作用,因为通常文本应该只使用可打印的字符。这就是为什么将其编码为 Base64 可以让您打印 key ,但也会增加 key 。
在文档中,他们可能会谈论 key Material ,因为它返回实际的 key 字节,而没有附加信息,例如 key 对应的算法。
关于java - key Material 与实际 key 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27064383/