SM2SM3SM4 java实现


SM2,SM3,SM4 java版的实现,可用于android加密解密
资源截图
代码片段和文件信息
package com.mlq.sm;

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[] = Util.byteConvert32Bytes(p2.getX().toBigInteger());
this.sm3keybase.update(p 0 p.length);
this.sm3c3.update(p 0 p.length);

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

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件         297  2016-12-28 09:42  TestSM.classpath
     文件         382  2016-12-28 09:39  TestSM.project
     文件          57  2016-12-28 09:41  TestSM.settingsorg.eclipse.core.resources.prefs
     文件         598  2016-03-25 14:36  TestSM.settingsorg.eclipse.jdt.core.prefs
     文件        3346  2016-12-28 09:43  TestSMincommlqsmCipher.class
     文件        3129  2016-12-28 09:43  TestSMincommlqsmSM2.class
     文件        4302  2016-12-28 09:43  TestSMincommlqsmSM2Utils.class
     文件        5063  2016-12-28 09:43  TestSMincommlqsmSM3.class
     文件        2920  2016-12-28 09:43  TestSMincommlqsmSM3Digest.class
     文件        7853  2016-12-28 09:43  TestSMincommlqsmSM4.class
     文件        4017  2016-12-28 09:43  TestSMincommlqsmSM4Utils.class
     文件         405  2016-12-28 09:43  TestSMincommlqsmSM4_Context.class
     文件        9496  2016-12-28 09:43  TestSMincommlqsmUtil.class
     文件     1876535  2016-03-21 14:08  TestSMlibscprov-jdk16-1.46.jar
     文件        2449  2016-03-28 15:14  TestSMsrccommlqsmCipher.java
     文件        3035  2016-03-28 15:14  TestSMsrccommlqsmSM2.java
     文件        3936  2016-03-28 15:14  TestSMsrccommlqsmSM2Utils.java
     文件        6502  2016-03-28 15:16  TestSMsrccommlqsmSM3.java
     文件        3097  2016-12-28 09:43  TestSMsrccommlqsmSM3Digest.java
     文件        9772  2016-03-28 15:14  TestSMsrccommlqsmSM4.java
     文件        4298  2016-03-28 15:22  TestSMsrccommlqsmSM4Utils.java
     文件         233  2016-03-28 15:14  TestSMsrccommlqsmSM4_Context.java
     文件       18276  2016-03-28 15:18  TestSMsrccommlqsmUtil.java

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)