• 大小: 165KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-05-13
  • 语言: Java
  • 标签: SM  国密  算法  前后端  

资源简介

SM 国密算法(Java+JS),包含SM2和SM3的前后端代码。亲测可用,下载即可使用。

资源截图

代码片段和文件信息

package com.dtdream.dtuser.base.util.encrypt.sm;

import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.math.ec.ECPoint;

import java.math.BigInteger;

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[] = SMUtil.byteConvert32Bytes(p2.getX().toBigInteger());
this.sm3keybase.update(p 0 p.length);
this.sm3c3.update(p 0 p.length);
p = SMUtil.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[] = SMUtil.byteConvert32Bytes(p2.getY().toBigInteger());
this.sm3c3.update(p 0 p.length);
this.sm3c3.doFinal(c3 0);
Reset();
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2345  2019-03-07 15:11  SM2SM3\java\SM\Cipher.java

     文件       2472  2019-03-07 15:05  SM2SM3\java\SM\SM2.java

     文件       5634  2019-03-07 15:45  SM2SM3\java\SM\SM2Utils.java

     文件       5588  2018-11-05 10:44  SM2SM3\java\SM\SM3.java

     文件       2684  2018-11-05 10:44  SM2SM3\java\SM\SM3Digest.java

     文件       2313  2018-11-05 10:44  SM2SM3\java\SM\SMUtil.java

     文件        913  2018-11-05 10:44  SM2SM3\read me.txt

     文件       2071  2019-03-07 14:26  SM2SM3\sm2.html

     文件     994532  2018-11-01 16:19  SM2SM3\sm2.js

     文件        680  2018-11-05 10:24  SM2SM3\sm3.html

     文件       7061  2018-11-05 10:44  SM2SM3\sm3.js

     目录          0  2019-03-07 16:08  SM2SM3\java\SM

     目录          0  2019-03-07 16:08  SM2SM3\java

     目录          0  2018-11-05 10:21  SM2SM3

----------- ---------  ---------- -----  ----

              1026293                    14


评论

共有 条评论