千家信息网

怎么使用Javascript创建数字签名

发表于:2024-10-05 作者:千家信息网编辑
千家信息网最后更新 2024年10月05日,本篇内容介绍了"怎么使用Javascript创建数字签名"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2024年10月05日怎么使用Javascript创建数字签名

本篇内容介绍了"怎么使用Javascript创建数字签名"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

有时需要让用户签署文本以证明他是完成操作的人。例如,在电子银行软件中,用户可能必须签署描述交易的文本("向 IBAN xxxxxxxxx 转账 300 美元"),或签署政府电子服务请求。这可以通过 java-applet 来实现,但由于 JRE 所有者不是大多数,因此最好使用其他方式。

当然,前提是用户有CA签发的数字签名,并按照CA的手册在浏览器中安装证书。如果这些步骤没有成功完成,下面的解决方案将不起作用。

另请注意,这使用 PKCS7(Java 开发人员:使用充气城堡来验证它),而不是 XAdES 标准。Internet Explorer 支持 XAdES,但 FireFox 不支持。

让我们看一个应该对给定文本进行签名的简单 HTML 页面:

 

然后是 JavaScript 本身:

function signDigest(text){if(window.event)window.event.cancelBubble =true; var dest = sign(text);//TODOalert(dest);return dest;} // CAPICOM constantsvar CAPICOM_STORE_OPEN_READ_ONLY = 0;var CAPICOM_CURRENT_USER_STORE = 2;var CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;var CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY = 6;var CAPICOM_CERTIFICATE_FIND_TIME_VALID = 9;var CAPICOM_CERTIFICATE_FIND_KEY_USAGE = 12;var CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE = 0x00000080;var CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0;var CAPICOM_INFO_SUBJECT_SIMPLE_NAME = 0;var CAPICOM_ENCODE_BASE64 = 0;var CAPICOM_E_CANCELLED = -2138568446;var CERT_KEY_SPEC_PROP_ID = 6; function IsCAPICOMInstalled(){if(typeof(oCAPICOM) =="object"){if( (oCAPICOM.object !=null) ){// We found CAPICOM!return true;}}} function FindCertificateByHash(){ try{// instantiate the CAPICOM objectsvar MyStore =new ActiveXObject("CAPICOM.Store");// open the current users personal certificate storeMyStore.Open(CAPICOM_CURRENT_USER_STORE,"My", CAPICOM_STORE_OPEN_READ_ONLY); // find all of the certificates that have the specified hashvar FilteredCertificates = MyStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, strUserCertigicateThumbprint); var Signer =new ActiveXObject("CAPICOM.Signer");Signer.Certificate = FilteredCertificates.Item(1);return Signer; // Clean UpMyStore =null;FilteredCertificates =null;}catch (e){if (e.number != CAPICOM_E_CANCELLED){return new ActiveXObject("CAPICOM.Signer");}}} function sign(src){if(window.crypto && window.crypto.signText)return sign_NS(src); return sign_IE(src);} function sign_NS(src){var s = crypto.signText(src,"ask" );return s;} function sign_IE(src){try{// instantiate the CAPICOM objectsvar SignedData =new ActiveXObject("CAPICOM.SignedData");var TimeAttribute =new ActiveXObject("CAPICOM.Attribute"); // Set the data that we want to signSignedData.Content = src;var Signer = FindCertificateByHash(); // Set the time in which we are applying the signaturevar Today =new Date();TimeAttribute.Name = CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;TimeAttribute.Value = Today.getVarDate();Today =null;Signer.AuthenticatedAttributes.Add(TimeAttribute); // Do the Sign operationvar szSignature = SignedData.Sign(Signer,true, CAPICOM_ENCODE_BASE64);return szSignature;}catch (e){if (e.number != CAPICOM_E_CANCELLED){alert("An error occurred when attempting to sign the content, the errot was: " + e.description);}}return "";}

"怎么使用Javascript创建数字签名"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0