JavaScript解析学习

用js模拟证书签名和验签过程

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>证书数据格式Demo</title>
<script type="text/javascript">         
	var PkiCom;
	/**对象初始化**/
	window.onload = function init() {
		try {
			PkiCom = new ActiveXObject('PSIAtv.PSIAPP');//自解:生成一个相关的Active对象
		} catch (e) {
			alert('未检测到本机上的数字证书客户端,请确保数字证书客户端正常运行。');
			if (confirm('您电脑上未安装数字证书客户端?\n是否下载并安装数字证书客户端?')) {
				//document.getElementById('seal_submit_btn').disabled = "true";
				btn_Controlle(0);	/*! 禁用submit控件 */
				alert('开始下载数字证书客户端中......');
				return false;
			}
		}
	}

	function btn_Controlle(NO_OFF) {//★为0是禁用控件、为1是开启控件
		var btn_array = document.getElementsByName("seal_submit_btn");//得到页面的三个提交按钮 
		switch(NO_OFF){
			case 0:
				for (var int = 0; int < btn_array.length; int++) {
					var btn = btn_array[int];
					btn.disabled = "true"; //三个提交按钮都关闭
				}
				break;
			case 1:
				for (var int = 0; int < btn_array.length; int++) {
					var btn = btn_array[int];
					btn.disabled = "";	//三个提交按钮都开启
				}
				break;
		}
	}

	function PKIServer(obj) {
		if (typeof (PkiCom) != "undefined") {
			btn_Controlle(0); /*! 禁用submit控件 */
			PkiCom.AtvInit(); //hw:初始化
			/*! 证书实体 */
			var CertEntity = PkiCom.GetCert(2);//hw:得到证书
			if (CertEntity == '') {
				alert('请插入数字证书。');
				btn_Controlle(1); /*! 开启submit控件 */
				return false;	//阻止表单提交
			}
			/*! 签名原文  */
			var StrServerRan = 'SH="1";SN="您正在进行";IN="0";SI="经办人注册";|SH="0";SN="RandomNum";'
				+'IN="0";SI="q6Y7h7ABghQktoVkQ21t+UEIrDqGB4yG";|';
			/*! 签名结果  */
			var StrClientSignedData = PkiCom.SignData(StrServerRan, 32772, 0);
			document.getElementById(obj+'CertEntity').value = CertEntity;
			document.getElementById(obj+'StrServerRan').value = StrServerRan;
			document.getElementById(obj+'StrClientSignedData').value = StrClientSignedData;
			return true;	//允许表单提交
		}
	}
</script>
</head>
<body>
	<div>
		<strong>身份认证交易 - 补充身份信息</strong>
		<form action="./seal" method="post" οnsubmit="return PKIServer('00001');">
			<table>
				<tr>
					<td colspan="2">
						<!-- 交易请求类型 --> 
						<input type="hidden" name="busitype" value="00001" />
						<!-- 证书实体 --> 
						<input type="hidden" id="00001CertEntity" name="certentity" /> 
						<!-- 签名原文 --> 
						<input type="hidden" id="00001StrServerRan" name="strserverran" />
						<!-- 签名结果 -->
						<input type="hidden" id="00001StrClientSignedData" name="strcilentsigneddata" />
					</td>
				</tr>
				<tr>
					<td>客户姓名:</td>
					<td><input type="text" name="username" value="张三" /></td>
				</tr>
				<tr>
					<td>证件类型:</td>
					<td><select name="idtype">
							<option value="A">身份证</option>
							<option value="B">军官证</option>
							<option value="C">解放军文职干部证</option>
							<option value="D">警官证</option>
							<option value="E">解放军士兵证</option>
							<option value="F">户口簿</option>
							<option value="G">(港澳)回乡证-通行证</option>
							<option value="H">台通行证-其他有效旅行证</option>
							<option value="I">(外国)护照</option>
							<option value="J">(中国)护照</option>
							<option value="K">武警文职干部证</option>
							<option value="L">武警士兵证</option>
							<option value="P">全国组织机构代码</option>
							<option value="Q">海外客户编号</option>
							<option value="R">营业执照号码</option>
							<option value="r">对公营业执照号码</option>
							<option value="Z">其他</option>
					</select></td>
				</tr>
				<tr>
					<td>证件号码:</td>
					<td><input type="text" name="idnumber" value="440306201306289999" /></td>
				</tr>
				<tr>
					<td colspan="2"><input name="seal_submit_btn" type="submit" value="提交" /></td>
				</tr>
			</table>
		</form>
	</div>

	<div>
		<strong>签名认证交易 - 补充身份信息</strong>
		<!-- ★★★onsubmit属性值:规定该事件发生时执行的 JavaScript 
			 return PKIServer('00002'); 利用到了它的返回值,达到了预期效果
			  作用:当PKIServer函数return false的时候,此表单是不会提交请求的,为true的时候才会跳转页面
			  -->
		<form action="./seal" method="post" οnsubmit="return PKIServer('00002');">
			<table>
				<tr>
					<td colspan="2">
						<!-- 交易请求类型 --> 
						<input type="hidden" name="busitype" value="00002" />
						<!-- 证书实体 --> 
						<input type="hidden" id="00002CertEntity" name="certentity" /> 
						<!-- 签名原文 --> <input type="hidden" id="00002StrClientSignedData" name="StrClientSignedData" />
					</td>
				</tr>
				<tr>
					<td>客户姓名:</td>
					<td><input type="text" name="username" value="张三" /></td>
				</tr>
				<tr>
					<td>证件号码:</td>
					<td><input type="text" name="idnumber"
						value="440306201306289999" /></td>
				</tr>
				<tr>
					<td>文档编号:</td>
					<td><input type="number" name="docsn" value="1234567890123456" /></td>
				</tr>
				<tr>
					<td colspan="2"><input name="seal_submit_btn" type="submit" value="提交" /></td>
				</tr>
			</table>
		</form>
	</div>
	
	<div>
		<strong>签名认证交易 - 文档验签</strong>
		<form action="./seal" method="post">
			<table>
				<tr>
					<td colspan="2">
						<!-- 交易请求类型 --> <input type="hidden" name="busitype" value="00003" />
					</td>
				</tr>
				<tr>
					<td>文档编号:</td>
					<td><input type="number" name="docsn" value="1234567890123456" /></td>
				</tr>
				<tr>
					<td>签名域数量:</td>
					<td><input type="number" name="signnum" value="4" /></td>
				</tr>
				<tr>
					<td>文档验证结果:</td>
					<td>成功<input type="radio" name="docsignresult"
						value="0" checked="checked" />
						失败<input type="radio" name="docsignresult"
						value="1" /></td>
				</tr>

				<tr>
					<td colspan="2"><input name="seal_submit_btn" type="submit" value="提交" /></td>
				</tr>
			</table>
		</form>
	</div>
</body>
</html>

知识点总结落实:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值