你好,我的目标是加密the文件的密码。现在,我只需要生成一个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);发布于 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要好得多。
https://stackoverflow.com/questions/57306384
复制相似问题