温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么使用Javascript创建数字签名

发布时间:2022-02-23 16:59:29 来源:亿速云 阅读:406 作者:iii 栏目:开发技术

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

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

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

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

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

<script src="sign.js" type="text/javascript"></script>   <input id="text" type="text" /> <input onclick="signDigest(document.getElementById('text').value);" type="button" value="Sign" />

然后是 JavaScript 本身:

function signDigest(text) { if(window.event) window.event.cancelBubble =true;   var dest = sign(text);//TODO alert(dest); return dest; }   // CAPICOM constants var 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 objects var MyStore =new ActiveXObject("CAPICOM.Store"); // open the current users personal certificate store MyStore.Open(CAPICOM_CURRENT_USER_STORE,"My", CAPICOM_STORE_OPEN_READ_ONLY);   // find all of the certificates that have the specified hash var FilteredCertificates = MyStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, strUserCertigicateThumbprint);   var Signer =new ActiveXObject("CAPICOM.Signer"); Signer.Certificate = FilteredCertificates.Item(1); return Signer;   // Clean Up MyStore =null; FilteredCertificates =null; } catch (e) { if (e.number != CAPICOM_E_CANCELLED) { return new ActiveXObject("CAPICOM.Signer"); } } }   function sign(src) { if(window.crypto &amp;&amp; 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 objects var SignedData =new ActiveXObject("CAPICOM.SignedData"); var TimeAttribute =new ActiveXObject("CAPICOM.Attribute");   // Set the data that we want to sign SignedData.Content = src; var Signer = FindCertificateByHash();   // Set the time in which we are applying the signature var Today =new Date(); TimeAttribute.Name = CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME; TimeAttribute.Value = Today.getVarDate(); Today =null; Signer.AuthenticatedAttributes.Add(TimeAttribute);   // Do the Sign operation var 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创建数字签名”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI