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

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

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

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

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

<scriptsrc="sign.js"type="text/javascript"></script><inputid="text"type="text"/><inputonclick="signDigest(document.getElementById('text').value);"type="button"value="Sign"/>

然后是 JavaScript 本身:

functionsignDigest(text){if(window.event)window.event.cancelBubble=true;vardest=sign(text);//TODOalert(dest);returndest;}//CAPICOMconstantsvarCAPICOM_STORE_OPEN_READ_ONLY=0;varCAPICOM_CURRENT_USER_STORE=2;varCAPICOM_CERTIFICATE_FIND_SHA1_HASH=0;varCAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY=6;varCAPICOM_CERTIFICATE_FIND_TIME_VALID=9;varCAPICOM_CERTIFICATE_FIND_KEY_USAGE=12;varCAPICOM_DIGITAL_SIGNATURE_KEY_USAGE=0x00000080;varCAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME=0;varCAPICOM_INFO_SUBJECT_SIMPLE_NAME=0;varCAPICOM_ENCODE_BASE64=0;varCAPICOM_E_CANCELLED=-2138568446;varCERT_KEY_SPEC_PROP_ID=6;functionIsCAPICOMInstalled(){if(typeof(oCAPICOM)=="object"){if((oCAPICOM.object!=null)){//WefoundCAPICOM!returntrue;}}}functionFindCertificateByHash(){try{//instantiatetheCAPICOMobjectsvarMyStore=newActiveXObject("CAPICOM.Store");//openthecurrentuserspersonalcertificatestoreMyStore.Open(CAPICOM_CURRENT_USER_STORE,"My",CAPICOM_STORE_OPEN_READ_ONLY);//findallofthecertificatesthathavethespecifiedhashvarFilteredCertificates=MyStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH,strUserCertigicateThumbprint);varSigner=newActiveXObject("CAPICOM.Signer");Signer.Certificate=FilteredCertificates.Item(1);returnSigner;//CleanUpMyStore=null;FilteredCertificates=null;}catch(e){if(e.number!=CAPICOM_E_CANCELLED){returnnewActiveXObject("CAPICOM.Signer");}}}functionsign(src){if(window.crypto&amp;&amp;window.crypto.signText)returnsign_NS(src);returnsign_IE(src);}functionsign_NS(src){vars=crypto.signText(src,"ask");returns;}functionsign_IE(src){try{//instantiatetheCAPICOMobjectsvarSignedData=newActiveXObject("CAPICOM.SignedData");varTimeAttribute=newActiveXObject("CAPICOM.Attribute");//SetthedatathatwewanttosignSignedData.Content=src;varSigner=FindCertificateByHash();//SetthetimeinwhichweareapplyingthesignaturevarToday=newDate();TimeAttribute.Name=CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;TimeAttribute.Value=Today.getVarDate();Today=null;Signer.AuthenticatedAttributes.Add(TimeAttribute);//DotheSignoperationvarszSignature=SignedData.Sign(Signer,true,CAPICOM_ENCODE_BASE64);returnszSignature;}catch(e){if(e.number!=CAPICOM_E_CANCELLED){alert("Anerroroccurredwhenattemptingtosignthecontent,theerrotwas:"+e.description);}}return"";}

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