📄 eccsign.java
字号:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.math.BigInteger;
import java.security.SecureRandom;
import java.security.Security;
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.crypto.digests.SHA1Digest;
import org.bouncycastle.crypto.generators.ECKeyPairGenerator;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECKeyGenerationParameters;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.crypto.signers.ECDSASigner;
import org.bouncycastle.jce.ECNamedCurveTable;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec;
import org.bouncycastle.math.ec.ECPoint;
/*
* Created on 2008-3-24
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author HP
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class EccSign {
public static void main(String[] args) {
try{
Security.addProvider(new BouncyCastleProvider());
/*
Enumeration enu=ECNamedCurveTable.getNames();
while(enu.hasMoreElements())
{
String name=enu.nextElement().toString();
System.out.println(name);
}
return;
*/
String plaint="this is my test";
SHA1Digest sha1=new SHA1Digest();
sha1.update(plaint.getBytes(),0,plaint.getBytes().length);
byte[] digest=new byte[sha1.getDigestSize()];
sha1.doFinal(digest,0);
// ECNamedCurveParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("prime256v1");
ECKeyPairGenerator gs=new ECKeyPairGenerator();
ECNamedCurveParameterSpec para=ECNamedCurveTable.getParameterSpec("prime256v1");
ECDomainParameters doman=new ECDomainParameters(para.getCurve(),para.getG(),para.getN(),para.getH());
ECKeyGenerationParameters gpara=new ECKeyGenerationParameters(doman,new SecureRandom());
//gpara.getRandom().getSeed()
//KeyGenerationParameters kgen=new KeyGenerationParameters();
gs.init(gpara);
AsymmetricCipherKeyPair pair=gs.generateKeyPair();
// System.out.println("aaa");
//KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC");
//g.initialize(ecSpec,new SecureRandom());
//KeyPair pair = g.generateKeyPair();
//CipherParameters para=CipherParameters
//ECPrivateKeyParameters privateparam=(ECPrivateKeyParameters)pair.getPrivate();
ECPrivateKeyParameters privKey = (ECPrivateKeyParameters)pair.getPrivate();
SaveKeys("private.dat",privKey.getD().toByteArray());
System.out.println("save private key success");
ECPublicKeyParameters pubKey = (ECPublicKeyParameters)pair.getPublic();
SaveKeys("public.dat",pubKey.getQ().getEncoded());
System.out.println("save public key success");
ECDSASigner sign=new ECDSASigner();
sign.init(true,pair.getPrivate());
BigInteger[] values=sign.generateSignature(digest);
System.out.println("signature ok");
//ECPublicKeyParameters publicparam=(ECPublicKeyParameters)pair.getPublic();
ECDSASigner vsign=new ECDSASigner();
vsign.init(false,pair.getPublic());
boolean flag= vsign.verifySignature(digest,values[0],values[1]);
if(flag)
System.out.println("verify ok");
else
System.out.println("verify err");
System.out.println("the next step is to verify");
ECNamedCurveParameterSpec paras=ECNamedCurveTable.getParameterSpec("prime256v1");
ECDomainParameters domans=new ECDomainParameters(para.getCurve(),para.getG(),para.getN(),para.getH());
//byte[] content=readFile("public.dat");
byte[] content=readFile("H:\\vc\\EccSignAndVerify\\pub.dat");
ECPoint point=domans.getCurve().decodePoint(content);
ECPublicKeyParameters pubkeyss=new ECPublicKeyParameters(point,doman);
ECDSASigner vsigns=new ECDSASigner();
vsigns.init(false,pubkeyss);
//digest[0]=0;
boolean flags= vsigns.verifySignature(digest,values[0],values[1]);
if(flags)
System.out.println("verify oksssssssss");
else
System.out.println("verify errsssssssss");
}
catch(Exception es)
{
System.out.println(es.getMessage());
}
}
public static void SaveKeys(String filename,byte[] content)
{
try{
FileOutputStream fs=new FileOutputStream(filename);
fs.write(content);
fs.close();
}
catch(Exception es)
{
System.out.println(es.getMessage());
}
}
public static byte[] readFile(String filename)
{
try
{
FileInputStream fin=new FileInputStream(filename);
int filelen=fin.available();
byte[] content=new byte[filelen];
fin.read(content);
fin.close();
return content;
}
catch(Exception es)
{
System.out.println(es.getMessage());
return null;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -