首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用p7b和p12证书

如何使用p7b和p12证书
EN

Stack Overflow用户
提问于 2019-08-01 09:54:26
回答 1查看 3.8K关注 0票数 0

你好,我的目标是加密the文件的密码。现在,我只需要生成一个SHA Hash,这将是我的密码,并使用RSA-Cryptoprovider与我的私钥加密密码。

现在,我需要使用.p7b.p12证书来完成这项任务。但是我不明白我需要这些文件是为了什么,经过一些研究,我发现.p12可能是我用来加密密码的文件,但是我需要.p7b做什么呢?

这就是我到目前为止对它所做的工作,因为我可以读取字符串,但仍然需要我的.p7b文件做什么?

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-01 10:34:33

p12 -- PKCS#12密钥/证书存储的扩展--或者.p7b -- PKCS#7二进制加密消息语法的扩展--都不是证书。

PKCS#12可用于存储多个私钥/证书链(需要签名或解密)或仅存储可信证书(用于验证或加密)。其他信息也可以存储,但是对于您的任务,您应该使用它作为密钥/证书存储。

PKCS#7标准指定加密消息语法或CMS。它指定容器格式,可用于指定签名或信封(读:加密)消息/文件。尽管RSA本身可以加密小文件,但PKCS#7允许您使用指定的https://en.wikipedia.org/wiki/Hybrid_cryptosystem形式。

容器格式指示并可能包含用于执行加密的证书,以便您可以选择使用哪个密钥。它还指定了用于执行加密的算法。要使用它,您需要一个比RSACryptoServiceProvider更高级别的API;它是在.NET框架内的PKCS命名空间中提供的(从EnvelopedCms开始)。PKCS是公钥密码标准的缩写,它首先由RSA实验室创建,然后在RFC中复制和继续。

PKCS#12和PKCS#7的结构是用一种定义称为ASN.1的数据结构的语言定义的。然后使用名为BER / DER的二进制编码格式对这些结构进行编码。但是,为了确保消息在基于文本的接口上正确地传输,PKCS#7文件通常使用PEM文本编码来执行ASCII,这基本上是几行页眉/页脚行,中间有基本64编码的二进制代码。文件名中的b显示不应该执行PEM编码。

注意,有时还会使用PKCS#7 / CMS来简单地存储证书,因为您只需要公钥就可以对证书进行加密。但是,为此使用PKCS#12要好得多。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57306384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档