当前位置: 首页 > 知识库问答 >
问题:

关键材料和实际关键材料之间的差异

闻人冷勋
2023-03-14

在使用Java库生成密钥时,我对密钥材料感到困惑,

根据SecretKeySpec文件,

public byte[] getEncoded()

返回此密钥的密钥材料。

关键材料到底是什么,因为如果我试着打印任何像这样的密钥,

System.out.print(secretKey.getEncoded())

我得到奇怪的输出,

s[B@541187f9

但当我使用任何编码方案打印它时,比如Base64、Base16,我会得到实际的密钥。

谁能解释一下关键材料到底是什么?

共有1个答案

颜黎昕
2023-03-14

SecretKeySpec用于对称算法。这些算法只有一个密钥,即位字符串。在Java中,它被表示为字节数组(byte[])。非对称算法密钥的编码不同。

byte[] keyBytes = /* set the key somehow */;
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
Arrays.equals(keyBytes, keySpec.getEncoded()); // true

至于“奇怪”的输出,数组是不可打印的Java所以只打印引用。如果您甚至想专门打印byte[],这也不起作用,因为通常文本应该只使用可打印的字符。这就是为什么将其编码为Base64可以打印密钥,但也可以膨胀密钥。

在文档中,他们可能会讨论密钥材料,因为它返回的是实际的密钥字节,而没有其他信息,比如密钥对应的算法。

 类似资料:
  • 两周培训规划 基础培训及考核-2d 代码规范培训-4h Linux基础-20h 工具培训及考核-6d gulp-4h webpack-4h postman-4h webstorm-4h git-8h gitlab-4h npm-4h bower-4h Lo-Dash-8h Chrome-dev-tool-4h Swagger-4h Graphql-4h SecureCRT-2h gitbook/m

  • 问题内容: 异步编程是下一个新兴的范式。。。在过去的几个月中,我一直在Node.js中进行编程,并且一直在学习以这种方式编写代码。我有一个在Silverlight中工作的同事,我一直在尝试教他如何使用TPL。我还向他展示了“ await”关键字及其工作方式。 一段时间后,使用回调变得很正常。在Node.js中,我正在使用caolan / async项目来避免深度嵌套的回调。我看了一下源代码,但这就

  • Angular material在选择时出现问题。像materiel auto complete一样,在单击按钮时无法选择值。但是它在单击按钮时工作。因此,我需要手动覆盖key事件上的key事件。怎么可能?

  • 简单地说,我不想使用第三方库,我只想知道是否可以使用android支持库以及如何做到这一点。

  • 1 要达到什么程度? 培训材料,要达到以下几个目的: 快速:以最短的时间掌握相关技能。所以:copy/paste要适度。 全面:对相关领域,有全面的讲解。这个全面指的是:对技术的历史、现状和未来,都应该有清晰的认识。 条理:由浅入深、循序渐进 趣味:有趣的历史,通俗易懂的示例 培训材料,需要训练的能力: 归纳法:总结归纳。 演绎法:深入剖析 比较法:对比分析 2 要写什么? 写材料的人,要写两份文

  • 描述 (Description) Framework7通知也可用于材质布局。 例子 (Example) 以下示例演示了Framework7中材质布局通知的使用 - <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-sca