stm32f407H库和stm32f103H库有区别吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32f407H库和stm32f103H库有区别吗相关的知识,希望对你有一定的参考价值。

参考技术A 有区别。
STM32F407在各个方面都是超过STM32F103的。
1、STM32F407主频是168M,STM32F103是72M。
2、STM32F407有DSP指令,STM32F103没有DSP指令。br>3、STM32F407的IO数是112个,STM32F103IO数是112个。br>4、STM32F407的串口数是6个,STM32F10串口数是5个。br>5、STM32F407的RTC支持日历,STM32F103RTC仅支持简单计时。

PKCS12 密钥库和 PKCS11 密钥库有啥区别?

【中文标题】PKCS12 密钥库和 PKCS11 密钥库有啥区别?【英文标题】:What is the difference between a PKCS12 keystore and a PKCS11 keystore?PKCS12 密钥库和 PKCS11 密钥库有什么区别? 【发布时间】:2011-09-03 16:38:33 【问题描述】:

我对 Java-NSS 库很感兴趣,我正在阅读Sun's P11 Guide。我对以下内容感到困惑:

使用 PKCS12 密钥库和 PKCS11 密钥库有什么区别?

密钥库只是一个密钥库,对吗?有什么不同吗?它们可以在任何方面互换使用吗?

【问题讨论】:

Bruno 已经解释的很好了,我就做一些cmets。使用 PKCS#12,您将提取密钥,然后使用 Sun 提供程序(或其他仅 Java 提供程序之一)简单地处理它们。使用 PKCS#11(这是一个完全不同的标准,PKCS 仅表示公钥加密标准),密钥将保留在 PKCS#11 令牌中,因此它将由本机 PKCS#11 库(或底层令牌)处理。所以 KeyStore 不仅仅是一个密钥库。但是,密钥库中的密钥/证书可以互换使用(如果 Java 代码足够兼容)。 @owlstead:我不清楚以下内容:PKCS11 密钥库是否可以用作密钥管理器的密钥库(在 jsse 中的 ssl 上下文中),以同样的方式向对方进行自我身份验证作为 PKCS12 密钥库可以在 keyManager 中配置?还是不可能? 是的,您可以像使用其他任何方式一样使用 PKCS11 KeyStore,包括通过 KeyManager 和 SSLContext。 【参考方案1】:

来自Different types of keystore in Java -- Overview,PKCS12和PKCS11的区别可以描述如下

PKCS12,这是一种标准的密钥库类型,可用于 Java 和 其他语言。您可以在以下位置找到此密钥库实现 sun.security.pkcs12.PKCS12KeyStore。它通常具有 p12 的扩展名 或 pfx。您可以将私钥、密钥和证书存储在 这个类型。与 JKS 不同,PKCS12 密钥库上的私钥可以是 在Java中提取。这种类型是便携式的,可以用 用 C、C++ 或 C# 等其他语言编写的其他库。

目前Java中默认的keystore类型是JKS,即keystore 如果您在创建时未指定 -storetype,则格式将为 JKS 带有 keytool 的密钥库。但是,默认的密钥库类型将是 在 Java 9 中更改为 PKCS12,因为它增强了兼容性 与 JKS 相比。您可以在以下位置检查默认密钥库类型 $JRE/lib/security/java.security 文件:

PKCS11,这是一种硬件密钥库类型。它提供了一个接口 用于连接硬件密钥库设备的 Java 库,例如 SafeNet 的 Luna、nCipher 或智能卡。你可以找到这个 在 sun.security.pkcs11.P11KeyStore 中实现。当您加载 密钥库,您无需创建具有特定 配置。该密钥库可以存储私钥、秘密密钥和 证书。加载密钥库时,将检索条目 从密钥库中提取,然后转换为软件条目。

【讨论】:

【参考方案2】:

PKCS#12 是一种文件格式(通常称为 .p12 或 .pfx),您可以在其中存储私钥和证书。它主要用于转换/传输密钥和证书。如果您从浏览器导出私钥 + 证书,它可能会采用该格式。

PKCS#11 是一个接口,通常用于与硬件加密令牌(通常是智能卡或 USB 令牌,它们实际上是嵌入在读卡器中的智能卡)进行通信。该接口有许多操作来使用密钥和证书。一些令牌能够使用它们包含的私钥进行签名,而密钥无法离开设备。 此接口的重点是将处理密钥和证书的内容视为一个单独的实体,而不必执行 PKCS#11 提供的加密操作(更具体地说,与私钥相关的操作)。

当您将 PKCS#11 与 NSS 一起使用时,您实际上是将 NSS 用作包裹在 PKCS#11 层后面的黑盒(它实际上是 PKCS#11 硬件令牌的软件提供者)。 Java 通过 PKCS#11 使用 NSS 的方式略有不同,因为它不需要 PKCS#11 共享库(与其他 PKCS#11 库相比),因此严格来说它不是 PKCS#11,虽然很相似。

在 Java 中,您可能能够从 PKCS#11 存储中获取 RSAPrivateKey 实例,使用它来签名和解密,而无法从其模数中获取任何内容。处理它的安全提供程序将通过库(如果硬件令牌支持该库,则通过令牌)进行签名/解密。

回到 Java 中的 KeyStore,它是一个 API,可以让您从文件中加载和使用密钥和证书(您可以获得各种文件格式,例如 JKS、PKCS#12、PEM,具体取决于您的安全提供商) 或来自其他底层 API(例如 PKCS#11,或多或少与 Sun 提供程序中的 NSS 合并,或者如果您在 OSX 上并希望将 KeyChain 用作 KeyStore,则为 KeychainStore)。

【讨论】:

@Bruno:1) 你提到智能卡。那 cert8.db 呢?这是 NSS 的 PKCS11 容器吗?2) 我不清楚 RSAPrivateKey 的使用部分. 可以在 ssl 上下文中配置密钥库(用作私有密钥库和签名)并且密钥库是 cert8.db(即 pkcs11 类型)吗?还是不可能? 如果你想使用cert8.db,你可以使用PKCS11 KeyStore配置来使用NSS并指向那个文件(严格来说这不是PKCS#11,但它是如此接近它被合并了在Java中使用它)。您还可以以不同方式配置PKCS11 KeyStore,以使用PKCS#11 共享库。 KeyStore 通常是更高级别的抽象,包含任何可以存储密钥/证书或您可以使用它们的东西。您确实可以为 SSL 使用这样的 KeyStore,只要密钥类型正确(取决于密码套件):RSA 很常见。 KeyStore,作为一个类,不一定是有形的东西,而是一个可用于与文件(JKS、P12)、令牌(PKCS#11)或其他接口的实体库(钥匙串商店,NSS)。事实证明,NSS 的要求与 PKCS#11 消费者的要求非常相似,因此他们将它们放在一起。然后可以根据需要配置这些底层实体中的每一个,例如指向cert8.db 文件或使用某个智能卡插槽。像 PKCS#12 文件这样更简单的文件不需要像这样的任何配置。 @Bruno:NSS 的 java 示例参考 cert8.db。所以它是一个简单的文件,可以像硬件令牌一样访问?我没听错吗? (在这里获得认证并不重要。)更重要的是 NSS 是 Java 的“外部”(它是一个来自 Mozilla 的库),并且与实际的 PKCS#11 有相似之处图书馆。因此,Sun 在 PKCS11 存储类型中实现了纯 PKCS#11 和 NSS 的接口。区别在于配置:使用“纯”PKCS#11,您使用的是library = .../libpkcs11.so;使用 NSS,您指定 nssLibraryDirectory = ...。 NSS 不是为通过 PKCS11 使用而构建的,但 Java 的 PKCS11 存储类型已扩展为支持 NSS 以及真正的 PKCS#11 库。

以上是关于stm32f407H库和stm32f103H库有区别吗的主要内容,如果未能解决你的问题,请参考以下文章

stm32 f103和f407的区别?

stm32f103跟f407的区别

stm32f407v与stm32f407zg的区别

stm32f407boot0在哪

STM32F407: USART 遇到的问题

STM32F103VET6基于HAL库和标准库下DAC 心形波形输出