Tag: 数字签名

CMS签名 – 时间戳和计数器签名有什么区别

我正在尝试使用BouncyCastle在C#中使用TimeStamp数字Siganture(使用本地TimeStamp证书)。 我对TimeStamp的理解是它要签署当前时间。 不确定它是否应该是当前时间+原始签名内容? 请帮忙。 我的主要困惑是如果将生成的TimeStamp添加到原始签名的Singed / Unsigned属性中。 或者它会被添加为CounterSignature?

CMS在.NET中签名,证书链不在本地可信证书库中

我有存储在网络上的X509证书。 我可以从远程Windows证书库中读取链。 我需要签署一些数据并在签名中包含链,以便以后validation它。 问题是我找不到将证书链放到CsmSigner的方法。 我已经读过它从构造函数参数获取证书并尝试使用X509Chain.Build构建一个链。 它忽略了证书列表值并且(显然)失败,因为在本地Windows证书库中找不到证书。 请在下面找到我的测试代码(仅当证书本地保存到Windows证书库时才有效) protected byte[] SignWithSystem(byte[] data, X509Certificate2 cert, X509Certificate[] chain) { ContentInfo contentInfo = new ContentInfo(data); SignedCms signedCms = new SignedCms(contentInfo, true); CmsSigner cmsSigner = new CmsSigner(cert); cmsSigner.DigestAlgorithm = new Oid(“2.16.840.1.101.3.4.2.1”); //sha256 cmsSigner.IncludeOption = X509IncludeOption.WholeChain; if (chain != null) { //adding cert chain to signer cmsSigner.Certificates.AddRange(chain); signedCms.Certificates.AddRange(chain); } signedCms.ComputeSignature(cmsSigner); //fails […]

带SHA256的SignedXml计算签名

我正在尝试使用SHA256对XML文档进行数字签名。 我正在尝试使用Security.Cryptography.dll 。 这是我的代码 – CryptoConfig.AddAlgorithm(typeof(RSAPKCS1SHA256SignatureDescription),”http://www.w3.org/2001/04/xmldsig-more#rsa-sha256″); X509Certificate2 cert = new X509Certificate2(@”location of pks file”, “password”); XmlDocument doc = new XmlDocument(); doc.PreserveWhitespace = true; doc.Load(@”input.xml”); SignedXml signedXml = new SignedXml(doc); signedXml.SigningKey = cert.PrivateKey; signedXml.SignedInfo.SignatureMethod = “http://www.w3.org/2001/04/xmldsig-more#rsa-sha256”; // // Add a signing reference, the uri is empty and so the whole document // is signed. Reference reference […]

使用ASP.Net中的客户端证书进行数字签名

我正在尝试使用私钥对信息进行数字签名。 我知道如何在.Net的桌面客户端应用程序中执行此操作,但我不确定如何在ASP.Net中执行此操作。 它将在使用IE8的Intranet上使用。 如果是通过ASP.Net完成的,我猜测当用户在访问站点时键入其证书passowrd(https,双向SSL)时,私钥不会发送到服务器,但我不确定。 如果无法访问服务器上的客户端私钥,那么如何在浏览器中签名呢? 我可以使用javascript吗? 编辑:我想首先要知道的是,如果可以在服务器上完成,还是必须在客户端上完成?

使用RSA密钥保护许可证密钥

已经晚了,我累了,而且可能很密集…… 我编写了一个我需要保护的应用程序,因此它只能在我生成密钥的机器上运行。 我现在正在做的是获取BIOS序列号并从中生成哈希值,然后我使用XML RSA私钥对其进行加密。 然后我签署XML以确保它不被篡改。 我试图打包公钥来解密和validation签名,但每次我尝试执行代码作为不同的用户而不是生成签名的用户我在签名上失败。 我的大多数代码都是根据我发现的示例代码进行修改的,因为我对RSA加密并不像我想要的那样熟悉。 下面是我正在使用的代码以及我认为需要使用的代码才能使其正常工作… 任何反馈都会非常感激,因为我现在很遗憾我正在处理的原始代码就是这样,只要用户启动程序与最初签署文档的程序相同,此代码就可以正常工作… CspParameters cspParams = new CspParameters(); cspParams.KeyContainerName = “XML_DSIG_RSA_KEY”; cspParams.Flags = CspProviderFlags.UseMachineKeyStore; // Create a new RSA signing key and save it in the container. RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams) { PersistKeyInCsp = true, }; 这段代码是我认为我应该做的,但无论我做什么都无法validation签名,无论它是同一个用户还是另一个用户…… RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(); //Load the private key from xml […]