你好,我的目标是加密邮政编码的密码。目前,我只需要生成一个SHA Hash
,该CC_1将是我的密码,然后将RSA-Cryptoprovider
与我使用私钥来加密密码。
现在,我需要使用.p7b
和.p12
证书来完成此任务。但是我不明白在进行一些研究之后我需要什么文件,我发现.p12
可能是我用来加密密码的文件,但是我需要.p7b
什么?
那是我到目前为止所做的,它似乎有效,因为我可以阅读字符串,但是我仍然需要什么.p7b
文件?
var password = @"test";
var p12FilePath = @"keyTest.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 键/证书存储的扩展名 - norc_9- pkcs#7 biarne的扩展消息语法 - 是证书。
PKCS#12可用于存储多个私钥/证书链(需要签名或解密(或仅信任证书(用于验证或加密(。其他信息也可以存储,但是对于您的作业,您应该将其用作密钥/证书存储。
PKCS#7标准指定加密消息语法或CMS。它指定了A 容器格式,可用于指定签名或包裹(读取:加密的(消息/文件。RSA本身可以加密小文件,而PKCS#7允许您使用 Hybrid Encryption 的指定形式。。
容器格式指示并可能包含用于执行加密的证书,因此您可以选择要使用的键。它还指定了用于执行加密的算法。要使用它,您需要比RSACryptoServiceProvider
更高的级别API;它在.NET框架中的PKCS名称空间中提供(从EnvelopedCms
开始(。PKCS代表公共密钥密码学标准,该标准是由RSA Labs创建的,然后在RFC中复制并继续。
PKCS#12和PKCS#7的结构是用一种定义称为ASN.1的数据结构的语言定义的。然后,使用称为ber/der的二进制编码格式对结构进行编码。但是,为了确保通过基于文本的接口正确传输消息,PKCS#7文件通常是使用PEM文本编码的ASCII装甲的,这基本上只是几个带有基本64编码二进制的标头/页线线。文件名中有b
,以表明不应执行PEM编码。
请注意,有时PKCS#7/CMS也用于简单地存储证书,该证书可用于加密,因为您只需要公开密钥。但是,使用PKCS#12为此更好。