关于JavaScript 国密算法-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

关于JavaScript 国密算法

2016-03-18 09:22:31 6128 1

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

取消 提交回答
全部回答(1)
  • 小旋风柴进
    2019-07-17 19:05:51

    基于现有已实现的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作为客户端的脚本语言,可以在提交到服务器端前对数据进行加密,这个还是非常有意义的,比如可以在客户端使用公钥加密账号信息,然后在服务器端用私钥进行解密。

    0 0
相关问答

2

回答

如何使用javascript进行RSA/ECB/PKCS1Padding算法加密

2018-07-20 15:41:31 1490浏览量 回答数 2

2

回答

如何使用javascript进行RSA/ECB/PKCS1Padding算法加密

2018-07-18 20:56:05 3755浏览量 回答数 2

2

回答

如何使用javascript进行RSA/ECB/PKCS1Padding算法加密

2018-07-16 13:44:13 5883浏览量 回答数 2

1

回答

在一个 context 中,template 是 JavaScript 函数和对象的一个模型吗?

2022-04-18 11:00:26 203浏览量 回答数 1

1

回答

前端面试经典题目合集-javascript里面的继承怎么实现,如何避免原型链上面的对象共享

2019-11-28 15:50:38 332浏览量 回答数 1

1

回答

javascript 里面的继承怎么实现,如何避免原型链上面的对象共享

2019-11-22 14:38:40 782浏览量 回答数 1

1

回答

JavaScript 怎么删除一个对象的样式中的某个属性?

2016-06-12 15:40:51 2412浏览量 回答数 1

1

回答

javascript 对象之间的关系处理

2016-03-13 10:21:04 1552浏览量 回答数 1

1

回答

javascript中有什么办法能修改input file 对象的name属性值么?

2016-03-13 11:06:16 4522浏览量 回答数 1

1

回答

javascript中有什么办法能修改input file 对象的name属性值么?

2016-03-10 16:45:33 2564浏览量 回答数 1
2709
文章
6591
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载