资源简介
js的实现是在http://www.jonllen.com/upload/jonllen/case/jsrsasign-master/sample-sm2_crypt.html基础上做了调整,完善了原概率性失败的问题。java代码同样也实现了密钥对生成、加密、解密。可以和js实现互相加密、解密
代码片段和文件信息
package com.luxy.core.utils;
import java.math.BigInteger;
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.math.ec.ECPoint;
public class Cipher
{
private int ct;
private ECPoint p2;
private SM3Digest sm3keybase;
private SM3Digest sm3c3;
private byte key[];
private byte keyOff;
public Cipher()
{
this.ct = 1;
this.key = new byte[32];
this.keyOff = 0;
}
private void Reset()
{
this.sm3keybase = new SM3Digest();
this.sm3c3 = new SM3Digest();
byte p[] = SecurityUtils.byteConvert32Bytes(p2.getX().toBigInteger());
this.sm3keybase.update(p 0 p.length);
this.sm3c3.update(p 0 p.length);
p = SecurityUtils.byteConvert32Bytes(p2.getY().toBigInteger());
this.sm3keybase.update(p 0 p.length);
this.ct = 1;
NextKey();
}
private void NextKey()
{
SM3Digest sm3keycur = new SM3Digest(this.sm3keybase);
sm3keycur.update((byte) (ct >> 24 & 0xff));
sm3keycur.update((byte) (ct >> 16 & 0xff));
sm3keycur.update((byte) (ct >> 8 & 0xff));
sm3keycur.update((byte) (ct & 0xff));
sm3keycur.doFinal(key 0);
this.keyOff = 0;
this.ct++;
}
public ECPoint Init_enc(SM2 sm2 ECPoint userKey)
{
AsymmetricCipherKeyPair key = sm2.ecc_key_pair_generator.generateKeyPair();
ECPrivateKeyParameters ecpriv = (ECPrivateKeyParameters) key.getPrivate();
ECPublicKeyParameters ecpub = (ECPublicKeyParameters) key.getPublic();
BigInteger k = ecpriv.getD();
ECPoint c1 = ecpub.getQ();
this.p2 = userKey.multiply(k);
Reset();
return c1;
}
public void Encrypt(byte data[])
{
this.sm3c3.update(data 0 data.length);
for (int i = 0; i < data.length; i++)
{
if (keyOff == key.length)
{
NextKey();
}
data[i] ^= key[keyOff++];
}
}
public void Init_dec(BigInteger userD ECPoint c1)
{
this.p2 = c1.multiply(userD);
Reset();
}
public void Decrypt(byte data[])
{
for (int i = 0; i < data.length; i++)
{
if (keyOff == key.length)
{
NextKey();
}
data[i] ^= key[keyOff++];
}
this.sm3c3.update(data 0 data.length);
}
public void Dofinal(byte c3[])
{
byte p[] = SecurityUtils.byteConvert32Bytes(p2.getY().toBigInteger());
this.sm3c3.update(p 0 p.length);
this.sm3c3.doFinal(c3 0);
Reset();
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-12-11 15:13 SM2_js+java\
目录 0 2018-12-11 15:13 SM2_js+java\java\
文件 2472 2018-12-11 11:32 SM2_js+java\java\Cipher.java
文件 2702 2018-12-11 11:31 SM2_js+java\java\SM2.java
文件 4496 2018-12-11 15:05 SM2_js+java\java\SM2Utils.java
文件 6538 2018-12-11 11:31 SM2_js+java\java\SM3.java
文件 3067 2018-12-11 11:31 SM2_js+java\java\SM3Digest.java
文件 20476 2018-12-11 11:33 SM2_js+java\java\SecurityUtils.java
目录 0 2018-12-11 15:13 SM2_js+java\js\
目录 0 2018-12-11 15:10 SM2_js+java\js\build\
文件 1020147 2018-12-11 14:23 SM2_js+java\js\build\index.js
文件 1020742 2017-12-21 15:55 SM2_js+java\js\build\test.js
文件 9591 2018-12-11 14:05 SM2_js+java\js\index.html
相关资源
- JWT(Json Web Token)Java实现jar
- java jsp简单的登录功能,验证,数据库
- 简单的BBS系统jsp+tomcat+sqlserver
- 考勤管理系统 WEBjsp)课程设计 acces
- jsp商品列表分页技术
- java++jsp+网络电视代码源码整理
- java++jsp+网络电视代码
- java+js+不规则区域地图+中国+省份+加亮
- jsp+Struts+hibernate基本框架搭建demo
- 网上成绩录入系统 jsp servlet Eclipse
- Servlet和JSP技术简述(英文和翻译)
- [已调试好]在线网上订餐jsp+sql数据库
- 图书馆管理系统jsp+mysql+Servlet+javaBea
- JSP图书管理系统(数据库齐全)
- jsplumbtoolkit.js 彻底破解去除域名验证
- fastjson alibaba jar包
- jsp邮箱文档+源码
- Android与Asp.Net交互
- NIIT考试(j2ee javabean sevlet jsp ejb)
- jsp实现登录功能
- jsp+sql server 网上商城
- 最新的fastjson 1.2.58 JAR库
- 一个简单的登录页面
- gson(2.8.6)-jar包.zip
- 国密算法SM3_SM4.zip
- 简单的jsp增删改查
- 学生信息管理(servlet+jsp+MySQL)
- 基于JSP和JDBC的图书管理系统
- jsplumbtoolkit demo 官方破解
- 使用MongoDB和JSP实现一个简单的购物车
评论
共有 条评论