如何使用 p7b 和 p12 证书
how to use p7b and p12 certificates
你好,我的目标是加密 zip 文件的密码。至于现在我只需要生成一个 SHA Hash
这将是我的密码,并使用 RSA-Cryptoprovider
和我的私钥来加密密码。
现在我需要使用 .p7b
和 .p12
证书来完成这项任务。
但是我不明白我需要这些文件有什么用,经过一些研究我发现 .p12
可能是我用来加密密码的文件但是我需要 .p7b
有什么用?
这就是我到目前为止所做的,它似乎有效,因为我可以读取字符串,但我仍然需要我的 .p7b
文件做什么?
var password = @"test";
var p12FilePath = @"key\Test.p12";
var text = @"myFutureZipPassword";
X509Certificate2 cert = new X509Certificate2(p12FilePath, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
byte[] certData = cert.Export(X509ContentType.Pfx, password);
RSACryptoServiceProvider rsaKey = (RSACryptoServiceProvider)cert.PrivateKey;
SHA1Managed sha1 = new SHA1Managed();
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] data = encoding.GetBytes(text);
byte[] hash = sha1.ComputeHash(data);
var sign = rsaKey.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"));
var str = System.Text.Encoding.Default.GetString(sign);
p12
- PKCS#12 key/certificate stores - nor .p7b
- the extension for PKCS#7 二进制 加密消息语法的扩展 - 都不是 证书。
PKCS#12 可用于存储多个私钥/证书链(需要签名或解密)或仅存储受信任的证书(用于验证或加密)。其他信息也可以存储,但对于您的作业,您应该将其用作密钥/证书存储。
PKCS#7 标准指定了加密消息语法或 CMS。它指定了一种容器格式,可用于指定签名或封装(读取:加密)的消息/文件。 RSA 本身可以加密小文件,而 PKCS#7 允许您使用指定的 hybrid encryption.
格式
容器格式指示并可能包含用于执行加密的证书,因此您可以选择要使用的密钥。它还指定了用于执行加密的算法。要使用它,您需要 API 比 RSACryptoServiceProvider
更高的等级;它在 .NET 框架内的 PKCS 命名空间中提供(以 EnvelopedCms
开头)。 PKCS 代表 Public 密钥加密标准,它首先由 RSA 实验室创建,然后复制并在 RFC 中继续使用。
PKCS#12 和 PKCS#7 的结构是用定义称为 ASN.1 的数据结构的语言定义的。然后使用称为 BER / DER 的二进制编码格式对结构进行编码。然而,为了确保消息通过基于文本的界面正确传输,PKCS#7 文件通常使用 PEM 文本编码进行 ASCII 装甲处理,这基本上只是一些页眉/页脚行,中间有 base 64 编码的二进制文件。文件名中的 b
表明不应执行 PEM 编码。
请注意,有时 PKCS#7 / CMS 也用于简单地存储证书,这可用于加密,因为您只需要 public 密钥即可。但是,为此使用 PKCS#12 会更好。
你好,我的目标是加密 zip 文件的密码。至于现在我只需要生成一个 SHA Hash
这将是我的密码,并使用 RSA-Cryptoprovider
和我的私钥来加密密码。
现在我需要使用 .p7b
和 .p12
证书来完成这项任务。
但是我不明白我需要这些文件有什么用,经过一些研究我发现 .p12
可能是我用来加密密码的文件但是我需要 .p7b
有什么用?
这就是我到目前为止所做的,它似乎有效,因为我可以读取字符串,但我仍然需要我的 .p7b
文件做什么?
var password = @"test";
var p12FilePath = @"key\Test.p12";
var text = @"myFutureZipPassword";
X509Certificate2 cert = new X509Certificate2(p12FilePath, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
byte[] certData = cert.Export(X509ContentType.Pfx, password);
RSACryptoServiceProvider rsaKey = (RSACryptoServiceProvider)cert.PrivateKey;
SHA1Managed sha1 = new SHA1Managed();
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] data = encoding.GetBytes(text);
byte[] hash = sha1.ComputeHash(data);
var sign = rsaKey.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"));
var str = System.Text.Encoding.Default.GetString(sign);
p12
- PKCS#12 key/certificate stores - nor .p7b
- the extension for PKCS#7 二进制 加密消息语法的扩展 - 都不是 证书。
PKCS#12 可用于存储多个私钥/证书链(需要签名或解密)或仅存储受信任的证书(用于验证或加密)。其他信息也可以存储,但对于您的作业,您应该将其用作密钥/证书存储。
PKCS#7 标准指定了加密消息语法或 CMS。它指定了一种容器格式,可用于指定签名或封装(读取:加密)的消息/文件。 RSA 本身可以加密小文件,而 PKCS#7 允许您使用指定的 hybrid encryption.
格式容器格式指示并可能包含用于执行加密的证书,因此您可以选择要使用的密钥。它还指定了用于执行加密的算法。要使用它,您需要 API 比 RSACryptoServiceProvider
更高的等级;它在 .NET 框架内的 PKCS 命名空间中提供(以 EnvelopedCms
开头)。 PKCS 代表 Public 密钥加密标准,它首先由 RSA 实验室创建,然后复制并在 RFC 中继续使用。
PKCS#12 和 PKCS#7 的结构是用定义称为 ASN.1 的数据结构的语言定义的。然后使用称为 BER / DER 的二进制编码格式对结构进行编码。然而,为了确保消息通过基于文本的界面正确传输,PKCS#7 文件通常使用 PEM 文本编码进行 ASCII 装甲处理,这基本上只是一些页眉/页脚行,中间有 base 64 编码的二进制文件。文件名中的 b
表明不应执行 PEM 编码。
请注意,有时 PKCS#7 / CMS 也用于简单地存储证书,这可用于加密,因为您只需要 public 密钥即可。但是,为此使用 PKCS#12 会更好。