Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Usb令牌(etoken pro 72 k(Java))读取证书并附加到pdf_C#_Asp.net_Usb_Digital Signature - Fatal编程技术网

C# 如何从Usb令牌(etoken pro 72 k(Java))读取证书并附加到pdf

C# 如何从Usb令牌(etoken pro 72 k(Java))读取证书并附加到pdf,c#,asp.net,usb,digital-signature,C#,Asp.net,Usb,Digital Signature,我想阅读Usb令牌safenet alladin etoken pro 72 kJava的签名,并附上pdf。我不知道怎么做。在以前的版本中,他们提供了导出.pfx文件的选项。现在他们提供了导出.cer文件的选项。当我在谷歌上搜索时,我得到了这个代码。当我运行此代码时,它会在输入密码后提示令牌的密码,我可以验证签名,但我不知道如何将签名附加到pdf。请引导我是否在正确的方向。我用的是c语言 private void btnGenpdfdigitalSignature_Click(object s

我想阅读Usb令牌safenet alladin etoken pro 72 kJava的签名,并附上pdf。我不知道怎么做。在以前的版本中,他们提供了导出.pfx文件的选项。现在他们提供了导出.cer文件的选项。当我在谷歌上搜索时,我得到了这个代码。当我运行此代码时,它会在输入密码后提示令牌的密码,我可以验证签名,但我不知道如何将签名附加到pdf。请引导我是否在正确的方向。我用的是c语言

private void btnGenpdfdigitalSignature_Click(object sender, EventArgs e)
        {
            try
            {

               // Cert myCert = null;

                // Sign text
                byte[] signature = Sign("Test", "Name of the signature person");

                // Verify signature. Testcert.cer corresponds to "cn=my cert subject"
                if (Verify("Test", signature,"jai.cer"))
                {


                }
                else
                {
                    Console.WriteLine("ERROR: Signature not valid!");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("EXCEPTION: " + ex.Message);
            }
           // Console.ReadKey();
        }

        static byte[] Sign(string text, string certSubject)
        {
            // Access Personal (MY) certificate store of current user
            X509Store my = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            my.Open(OpenFlags.ReadOnly);

            // Find the certificate we'll use to sign            
            RSACryptoServiceProvider csp = null;
            foreach (X509Certificate2 cert in my.Certificates)
            {
                if (cert.Subject.Contains(certSubject))
                {
                    // We found it. 
                    // Get its associated CSP and private key
                    csp = (RSACryptoServiceProvider)cert.PrivateKey;

                }

            }
            if (csp == null)
            {
                throw new Exception("No valid cert was found");
            }

            // Hash the data
            SHA1Managed sha1 = new SHA1Managed();
            UnicodeEncoding encoding = new UnicodeEncoding();
            byte[] data = encoding.GetBytes(text);
            byte[] hash = sha1.ComputeHash(data);

            // Sign the hash
            return csp.SignHash(hash, CryptoConfig.MapNameToOID("Test"));


        }


        public bool Verify(string text, byte[] signature, string certPath)
        {
            // Load the certificate we'll use to verify the signature from a file 
             cert = new X509Certificate2(certPath);
            // Note: 
            // If we want to use the client cert in an ASP.NET app, we may use something like this instead:
            // X509Certificate2 cert = new X509Certificate2(Request.ClientCertificate.Certificate);

            // Get its associated CSP and public key
            RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert.PublicKey.Key;

            // Hash the data
            SHA1Managed sha1 = new SHA1Managed();
            UnicodeEncoding encoding = new UnicodeEncoding();
            byte[] data = encoding.GetBytes(text);
            byte[] hash = sha1.ComputeHash(data);

            // Verify the signature with the hash
            return csp.VerifyHash(hash, CryptoConfig.MapNameToOID("Test"), signature);


        }
看起来,您需要使用存储在USB令牌上的密钥对PDF进行签名

首先要弄清楚的是使用什么样的签名格式。PDF可以根据PDF规范进行签名,其中包括数字签名、PAdES扩展PDF签名,或者使用CMS/CAdES甚至XMLDSig/XAdES作为通用二进制数据进行签名

假设您需要根据PDF规范签署PDF,您很可能需要使用一些库,如我们的或查看许可证和定价

回到技术方面,您提到的.cer文件只包含证书的公共部分,用于签名的私钥通常无法从安全设备(如USB令牌)中提取。PDF签名库必须支持通过某些编程接口调用USB令牌。我们的PDFBlackbox支持CryptoAPI和PKCS11,以便对数据的哈希进行签名

看起来,您需要使用存储在USB令牌上的密钥对PDF进行签名

首先要弄清楚的是使用什么样的签名格式。PDF可以根据PDF规范进行签名,其中包括数字签名、PAdES扩展PDF签名,或者使用CMS/CAdES甚至XMLDSig/XAdES作为通用二进制数据进行签名

假设您需要根据PDF规范签署PDF,您很可能需要使用一些库,如我们的或查看许可证和定价


回到技术方面,您提到的.cer文件只包含证书的公共部分,用于签名的私钥通常无法从安全设备(如USB令牌)中提取。PDF签名库必须支持通过某些编程接口调用USB令牌。我们的PDFBlackbox支持CryptoAPI和PKCS11,以便对数据的哈希进行签名

如果您想使用嵌入签名对PDF进行签名,您很可能需要使用PDF处理库,例如将签名嵌入PDF文档结构的库。iText软件公司的布鲁诺·洛瓦吉(Bruno Lowagie)撰写了一份名为《数字签名》的白皮书,该白皮书是PDF文档中数字签名信息的重要来源

如果你想在Windows以外的平台上使用你的应用程序,那么你应该看看我的库,它扩展了iTextSharp,能够使用几乎所有PKCS11兼容设备智能卡、HSM等上存储的私钥对PDF文档进行数字签名


iTextSharp和Pkcs11Interop.PDF库的最大优点是它们在双许可模式下可用,因此,如果您能够遵守的条款,那么您可以免费使用这两个库。

如果您想要使用嵌入签名的PDF签名,您很可能需要使用PDF处理库,例如将嵌入将签名转换为PDF文档的结构。iText软件公司的布鲁诺·洛瓦吉(Bruno Lowagie)撰写了一份名为《数字签名》的白皮书,该白皮书是PDF文档中数字签名信息的重要来源

如果你想在Windows以外的平台上使用你的应用程序,那么你应该看看我的库,它扩展了iTextSharp,能够使用几乎所有PKCS11兼容设备智能卡、HSM等上存储的私钥对PDF文档进行数字签名

iTextSharp和Pkcs11Interop.PDF库的最大优点是它们在双许可模式下可用,因此如果您能够遵守的条款,那么您可以免费使用这两个库