在使用Java库生成密钥时,我对密钥材料感到困惑,
根据SecretKeySpec文件,
public byte[] getEncoded()
返回此密钥的密钥材料。
关键材料到底是什么,因为如果我试着打印任何像这样的密钥,
System.out.print(secretKey.getEncoded())
我得到奇怪的输出,
s[B@541187f9
但当我使用任何编码方案打印它时,比如Base64、Base16,我会得到实际的密钥。
谁能解释一下关键材料到底是什么?
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