javascript-关于JavaScript 国密算法

问题描述

关于JavaScript 国密算法
谁有研究国密算法,JavaScript写的SM4算法 最近在看这个 实在没有头绪 不知道怎么写 谁能给一些建议或者一些模块的代码

解决方案

基于现有已实现的C#版SM2国密算法的签名验证,再结合原来JavaScript的ECC算法,使用JavaScript实现SM2国密算法的签名验证相对简单,只需要将C#语言翻译成JavaScript语言实现。不过中间还是遇到了些问题,主要是在JavaScript计算SM3摘要值大数的运算上还是有些不同。

1)JS计算SM3摘要

在做SM2签名之前,需要先计算出原始数据的SM3摘要值,需要计算出z值,这其中就用到了大量的移位运算。JavaScript本身支持移位异或运算,但在C#中数字有int、long等多种类型,而在JavaScript中都用Number类型,这些不同类型运算要分别处理。C#的long类型表示64位有符号的整数,为区分32位整数在值后面加L显示定义。而在JavaScript就要把整数转成64位长度来计算。

C#中默认不检查运算上溢下溢,除开使用常量编译器会提示,或显示使用了checked关键字检查溢出。原来在C#中使用int类型运算的,并在计算后可能会超出Int32.MinValue~Int32.MaxValue范围的,在JavaScript中就需要截取超出32位长度的高位。并且要按优先顺序计算,即a+b+c必须先计算出(a+b)结果是否溢出再加c,不能直接先计算(a+b+c)总结果再计算溢出后32位的值。因此我用JavaScript写了个C#中的unchecked情况下Int32位数字溢出后转换的值。

而C#中原来的byte[]在JavaScript里变成了Array数组,原来C#中使用的BigInteger大数计算类也原封不动移到了JavaScript中来,还有ECC曲线的Curve、ECPoint对象等等,这样只需要注册SM3、SM2算法再实现就可以了,原来C#中SM2算法就不在此叙述了。

2)SM2签名用的随机数

原来在SM2测试曲线的示例中,有人提出每次签名的结果是一样的。后面发现那里签名时用的k是固定值,所以只要签名密钥和原始数据没变,每次签名后的结果都是一样的。SM2国密标准里用的k值是随机生成的,所以SM2国密算法的签名结果每次都不一样。而SM2国密算法的加密中也生成了随机数,因此每次SM2加密结果也都不一样。

3)JS的SM2算法应用

JavaScript实现SM2国密算法的签名和验证现在应用得比较少,一般来说签名使用的私钥都封在UKey安全设备中了,为保证安全性硬件本身提供了算法接口,很少使用软算法实现。不过JavaScript作为客户端的脚本语言,可以在提交到服务器端前对数据进行加密,这个还是非常有意义的,比如可以在客户端使用公钥加密账号信息,然后在服务器端用私钥进行解密。

解决方案二:
http://jonllen.com/jonllen/js/175.aspx

时间: 2025-01-09 07:09:12

javascript-关于JavaScript 国密算法的相关文章

“云上贵州”成全国首个国密算法应用试点项目 阿里政务云实现“国家级”安全保护

11月22日,阿里云联合国家密码管理局.贵州省密码管理局.数据通信科学技术研究所.云上贵州大数据产业发展有限公司共同宣布:"云上贵州"成为国内首个国家商用密码算法应用试点项目. 据悉,这是阿里云和贵州省在数据安全领域的首次合作.通过落实国家商用密码及密钥管理体系搭建,"云上贵州"系统平台可对数据进行更安全的管理,保证数据不丢失,不被盗用. "云上贵州"是贵州省基于阿里云飞天操作系统打造的基础平台,也是阿里云电子政务云平台的首个"省域&q

openssl移植国密算法perl出问题

问题描述 openssl移植国密算法perl出问题 10C 最近做向openssl移植国密算法的项目,在生成OID的时候,perl objxref.pl obj_xref.txt obj_xref.h时,提示错误:Not Found ""/*"" 本人对perl一窍不通,求大神指点,可能是哪里错误 解决方案 就是你obj_xref.txt 中肯定有一句 "/*"或者'/什么什么'的话,在你当前的目录情况下找不到. 解决方案二: 什么操作系统,wi

国密算法

问题描述 请问谁弄过国密算法(java),有的话麻烦给我发下代码吧,在线等,拜托了!910517733@qq.com

javascript实现图片相似度算法

 这篇文章主要介绍了javascript实现图片相似度算法,大家参考使用吧 代码如下: function getHistogram(imageData) {     var arr = [];     for (var i = 0; i < 64; i++) {         arr[i] = 0;     }     var data = imageData.data;     var pow4 = Math.pow(4, 2);     for (var i = 0, len = data

JavaScript中几种排序算法的简单实现_基础知识

排序算法的实现 我的JS水平就是渣渣,所以我就用类似于JAVA和C的方式来写JavaScript的排序算法了. 而且这里我不讲算法原理,仅仅只是代码实现,可能会有Bug,欢迎大家博客评论指导.插入排序 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排

Javascript中的常见排序算法_javascript技巧

具体代码及比较如下所示: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" lang="gb2312">

javascript作用域: JavaScript的作用域

/***************************************  *其结果是打印出global  ****************************************/  var a = 'global';  ( test(){  write(a);  })();  /***************************************  *其结果是打印出undefined  ****************************************

【JavaScript】javaScript基础知识回顾

我们首先对JavaScript的基础进行回顾. 1.浏览器的对象树 总浏大纲,还是要先看浏览器的对象树: 如1.1浏览器的对象树.png 2.window对象常用方法 alert('信息'):      消息框 prompt('提示信息',默认值): 标准输入框 confirm( ):      确认框 open( ):      打开一个新窗口 close( ):     关闭窗口 3.Form表单对象 访问表单的方式:     *  document.forms[n]     *  docu

怎么选择Javascript框架(Javascript Framework)_javascript技巧

Ajax的兴起,给 Javascript带来了新的生机,大量的javascript框架(Javascript Framework)层出不穷,一些框架来至于开发人员项目经验的总结和提炼,也有一些框架来至于商业公司,同时以开源和商业两种方式发布.借助这些框 架,可以大大加速Ajax项目的开发速度,但同时也面临不同的学习曲线,以及架构扩展性等等问题.如何选择Javascript框架,成为开发人员和架构 师头痛的一个问题.如果你正面临这样的问题,希望下面的几个建议对你在选择javascript框架上会有