資源簡介
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? 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? 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
- 上一篇:Java飛翔的小鳥全部代碼
- 下一篇:Express12.zip
評論
共有 條評論