sm2-fabric
Version:
sm2 for fabric-sdk-node
252 lines (215 loc) • 12.6 kB
HTML
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
<meta name="description" content="JavaScript implementation of SM2 Algorithm Encryption and Decryption sample." />
<!--<link rel="stylesheet" type="text/css" media="screen" href="stylesheets/stylesheet.css">-->
<title>SM2 Algorithm Encryption and Decryption sample</title>
<style>
textarea {
width: 100%;
}
</style>
<!-- for pkcs5pkey -->
<script src="build/index.js"></script>
<script language="JavaScript" type="text/javascript">
function doGenerate() {
var f1 = document.form1;
var curve = f1.curve1.value;
var ec = new KJUR.crypto.ECDSA({
"curve": curve
});
var keypair = ec.generateKeyPairHex();
f1.prvkey1.value = keypair.ecprvhex;
f1.pubkey1.value = keypair.ecpubhex;
}
function doGetAESKey() {
var f1 = document.form1;
f1.aesKey.value = CryptoJS.lib.WordArray.random(16).toString();
f1.aesIV.value = CryptoJS.lib.WordArray.random(16).toString();
}
function doAESCrypt() {
var f1 = document.form1;
var aesKey = f1.aesKey.value;
var aesIV = f1.aesIV.value;
var aesSrcData = f1.aesSrcData.value;
var aesEncrypted = aesEcrypt(aesSrcData, aesKey, aesIV);
f1.msg1.value = aesEncrypted;
f1.aesEncrypted.value = aesEncrypted;
}
function doAESDecrypt() {
var f1 = document.form1;
var aesKey = f1.aesKey.value;
var aesIV = f1.aesIV.value;
var aesEncrypted = f1.aesEncrypted.value;
var aesDecrypted = aesDeEcrypt(aesEncrypted, aesKey, aesIV);
f1.aesDecrypted.value = aesDecrypted;
}
function aesEcrypt(data, keyStr, ivStr) {
// 将数据数据进行 utf-8 格式
var sendData = CryptoJS.enc.Utf8.parse(data);
var key = CryptoJS.enc.Utf8.parse(keyStr);
var iv = CryptoJS.enc.Utf8.parse(ivStr);
//对数据进行aes加密
var aesEcryptData = CryptoJS.AES.encrypt(data, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
//对加密后的数据进行 Base64转换
return CryptoJS.enc.Base64.stringify(aesEcryptData.ciphertext);
}
function aesDeEcrypt(deData, keyStr, ivStr) {
var decryptData = CryptoJS.enc.Base64.parse(deData);
var key = CryptoJS.enc.Utf8.parse(keyStr);
var iv = CryptoJS.enc.Utf8.parse(ivStr);
try {
var deEcrypData = CryptoJS.AES.decrypt(decryptData, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return deEcrypData.toString(CryptoJS.enc.Utf8);
} catch (e) {
//console.log(e);
return JSON.stringify({
Code: 91,
message: '解密失败'
});
}
}
function doCrypt() {
var f1 = document.form1;
var curve = f1.curve1.value;
var msg = f1.msg1.value;
var pubkeyHex = f1.pubkey1.value;
var encryptData = sm2Encrypt(msg, pubkeyHex);
f1.sigval1.value = encryptData;
}
function doDecrypt(encrypData) {
var f1 = document.form1;
var prvkey = f1.prvkey1.value;
encrypData = encrypData || f1.sigval1.value;
var data = sm2Decrypt(encrypData, prvkey);
f1.deCryptMsg.value = data;
//console.log(data);
}
</script>
</head>
<body>
<!-- HEADER -->
<div id="header_wrap" class="outer">
<header class="inner">
<h1 id="project_title">SM2 Algorithm Encryption and Decryption sample</h1>
<h2 id="project_tagline">generating SM2 keypair, SM2 Algorithm Encryption and Decryption</h2>
<a href="http://www.jonllen.com">Home</a> |
<a href="sample-sm2.html">SM2 sample</a> |
<a href="sample-sm2_tool.html">SM2 Cert Verifcation</a> |
<a href="sample-sm2_crypt.html">SM2 Encryption and Decryption sample</a>
</header>
</div>
<!-- MAIN CONTENT -->
<div id="main_content_wrap" class="outer">
<section id="main_content" class="inner">
<script type="text/javascript">
if (/msie/.test(navigator.userAgent.toLowerCase())) {
document.write("<p><em>若IE浏览器下提示停止运行此脚本,请选择<b>否(N)</b>继续运行。</em></p>");
}
</script>
<!-- now editing -->
<form name="form1">
<h4>AES 加密 CBC Pkcs7</h4>
<br/>
<input type="button" value="获取aes iv key" onClick="doGetAESKey();" /><br/>
<p>
aes key: <input type="text" name="aesKey" value="" size="100" />
<br/> aes iv:
<input type="text" name="aesIV" value="" size="100" /><br/>
</p>
<!-- ============================================================== -->
<h4>(Step2)AES Crypt message</h4>
<br/> Message aes string to be Crypted:
<textarea width="100%" name="aesSrcData" rows="6">
据冯梦龙比较严肃、真实的历史小说《东周列国志》记述,周之阳城地界,有一个山谷,山深树密,幽不可测,不是人所能居住的地方,所以叫“鬼谷”。谷中居有一位隐者,自号鬼谷子,相传是晋平公时人,姓王名诩。他在云梦山与宋人墨翟一起采药修道。墨子不娶妻不养子,云游天下,济人利物,救危扶穷。鬼谷子王诩则通天彻底,其学问之渊博,无人能及:“一曰数学,日星象纬,在其掌中,占往察来,言无不验;二曰兵学,六韬三略,变化无穷,布阵行兵,鬼神不测;三曰游学,广记多闻,明理审势,出词吐辩,万口莫当;四曰出世学,修真养性,服食导引,却病延年,冲举可俟。”(参看冯梦龙《东周列国志》第87回。)鬼谷先生既然深知仙家的冲举超凡之术,为何要屈居人间俗世呢?原来,他只是为了超度几个聪明的弟子,同归仙境,所以栖身鬼谷。他住隐居鬼谷不计年数,其弟子也不计其数。据说,他的最出色的弟子是苏秦、张仪。前一位是七国征战时的著名军事家,而后一位是战国时的著名纵横家。此外,帮助越王勾践卧薪尝胆,战胜吴王夫差成功复国的谋略家范蠡,也传说是鬼谷子的弟子;战国时著名外交家毛遂,也传说是鬼谷子的弟子;秦代采药养生的大师徐福,也传说是鬼谷子的弟子。传说中鬼谷子还有一个师妹,就是拥有九天秘籍,熟谙天机、人道、地脉的九天玄女,师兄妹俩人同是师承于道家的创始人老聃。华裔澳洲国籍的著名历史小说家萧玉寒就写了一本《鬼谷子》传奇,专门讲鬼谷子和九天玄女的传奇故事
</textarea>
<br/>
<input type="button" value="AES Crypt message" onClick="doAESCrypt();" /><br/>
<p>
Crypt value:
<textarea width="100%" name="aesEncrypted" id="aesEncrypted" rows="6"> </textarea><br/>
</p>
<h4>(Step3) Decrypt message</h4>
<input type="button" value="decrypt it!" onClick="doAESDecrypt();" /> deCrypt value:
<textarea width="100%" name="aesDecrypted" id="aesDecrypted" rows="6"></textarea><br/>
<h4>(Step1) choose supported EC curve name and generate key pair</h4>
ECC curve name:
<select name="curve1">
<option value="sm2">SM2
<option value="secp256r1">secp256r1 (= NIST P-256, P-256, prime256v1)
<option value="secp256k1">secp256k1
<option value="secp384r1">secp384r1 (= NIST P-384, P-384)
</select>
<br/>
<input type="button" value="generate EC key pair" onClick="doGenerate();" /><br/>
<p>
EC private key (hex): <input type="text" name="prvkey1" value="" size="100" /><br/> EC public key (hex): <input type="text" name="pubkey1" value="" size="100" /><br/>
</p>
<!-- ============================================================== -->
<h4>(Step2) Crypt message</h4>
Crypt Options:
<select id="cipherMode" name="cipherMode">
<option value="1" selected="selected">C1C3C2
<option value="0">C1C2C3
</select>
<br/> Message string to be Crypted:
<textarea width="100%" name="msg1" id="msg1" rows="6"> </textarea><br/>
<input type="button" value="Crypt message" onClick="doCrypt();" /><br/>
<p>
Crypt value (hex):<textarea width="100%" name="sigval1" id="sigval1" rows="6"> </textarea><br/>
</p>
<h4>(Step3) Decrypt message</h4>
<input type="button" value="decrypt it!" onClick="doDecrypt();" /> Decrypt message:<textarea width="100%" name="deCryptMsg" id="deCryptMsg" rows="6"> </textarea><br/>
<input type="reset" value="reset" />
</form>
<!-- now editing -->
</section>
<section class="inner">
<hr size="1" />
<h4>SM2 Certificate Encryption</h4>
<fieldset>
<legend>SM2证书加密</legend>
<ul>
<li>
<label>原始数据:<input type="text" id="txtRawData" size="80"
value="jonllen" /></label>
</li>
<li>
<label>证书数据:<textarea width="100%" id="txtCertData" style="width:500px; height:40px;">MIICQDCCAeWgAwIBAgIQG2THdO0arf/KaLKoTVlCOzAMBggqgRzPVQGDdQUAMB8xEDAOBgNVBAMMB1NNMlJPT1QxCzAJBgNVBAYTAkNOMB4XDTE0MDYxODEzNTgzNVoXDTE2MDYxODEzNTgzNVowZTEiMCAGCSqGSIb3DQEJARYTam9ubGxlbkBob3RtYWlsLmNvbTEPMA0GA1UEBwwG6ZW/5rKZMQ8wDQYDVQQIDAbmuZbljZcxCzAJBgNVBAYTAkNOMRAwDgYDVQQDDAdKb25sbGVuMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEXLAuT39XB5LJmTprFiGLPfqZl5tyGm1n9oXSVDrGRP2RfQRJOqD6cH6PEvmGhM1ydJv0iQMg2mvh6PjAlm58W6OBujCBtzAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQstXX3UIwlBK9k70GJYGM8mjG6gTAfBgNVHSMEGDAWgBQ/LpOmNnAJt7mAwIZpsX3cnqlkqjBCBggrBgEFBQcBAQQ2MDQwMgYIKwYBBQUHMAKGJmh0dHA6Ly9sb2NhbGhvc3QvUEtJL2NlcnRzL0RTQVJPT1QuY3J0MA4GA1UdDwEB/wQEAwIE8DATBgNVHSUEDDAKBggrBgEFBQcDAjAMBggqgRzPVQGDdQUAA0cAMEQCIBJO7K/XDt+igzKkWSkbRKZRtQKsS1i2Fmdp2Ar5EEL+AiA759mE/uINaEC7sMXOoqzTzkLCMIHGyLi80j0dG5pjow==</textarea>
<em>base64编码格式</em>
</label>
</li>
<li style="display:none">
<label>证书公钥:<input type="text" id="txtPubKey" size="120"
value="" /></label>
</li>
<li>
<input type="button" value="加密" onClick="certCrypt();" />
</li>
<li>
<label>加密后数据:<textarea width="100%" id="txtCryptData" readonly="readonly" style="width:500px; height:40px;"></textarea><em>base64编码格式</em>
</label>
</li>
</ul>
<div>
</div>
</fieldset>
</section>
</div>
<!-- FOOTER -->
<div id="footer_wrap" class="outer">
<footer class="inner">
<p>Powered By <a href="http://www.jonllen.com/" target="_blank">Jonllen</a></p>
</footer>
</div>
</body>
</html>