版权声明:本文为博主原创文章,可以随意转载,但请附原地址或原作者名。谢谢! https://blog.csdn.net/farley119/article/details/87875201
Curve25519加解密 和 Ed25519加验签的使用
Curve25519
Curve25519 是目前最高水平的 Diffie-Hellman函数,适用于广泛的场景,由Daniel J. Bernstein教授设计。在密码学中,Curve25519是一个椭圆曲线提供128位安全性,设计用于椭圆曲线Diffie-Hellman(ECDH)密钥协商方案。它是最快的ECC曲线之一,并未被任何已知专利所涵盖。
实例化:
Curve25519 cipher = Curve25519.getInstance(Curve25519.BEST)
生成秘钥对:
Curve25519KeyPair keyPair = cipher!!.generateKeyPair()
byte[] privateKey = keyPair.getPrivateKey()
byte[] publicKey = keyPair.getPublicKey()
生成共享秘钥:
byte[] temp = cipher!!.calculateAgreement(publicKey,privateKey)
Ed25519
Ed25519是一个数字签名算法,签名和验证的性能都极高, 一个4核2.4GHz 的 Westmere cpu,每秒可以验证 71000 个签名,安全性极高,等价于RSA约3000-bit。签名过程不依赖随机数生成器,不依赖hash函数的防碰撞性,没有时间通道攻击的问题,并且签名很小,只有64字节,公钥也很小,只有32字节。
实例化:
KeyPairGenerator edDsaKpg = new KeyPairGenerator()
生成秘钥对:
KeyPair keyPair = edDsaKpg.generateKeyPair()
PrivateKey privateKey = keyPair.getPrivate()
PublicKey publicKey = keyPair.getPublic()
签名:
//签名
byte[] setSign(byte[] data){
EdDSAEngine edEng = new EdDSAEngine();
edEng.initSign(privateKey);
edEng.setParameter(EdDSAEngine.ONE_SHOT_MODE);
edEng.update(data);
byte[] enEdata = edEng.sign();
return enEdata;
}
验签:
//验证
Boolean verifySign(String:data,String:signData){
String mKey = "签名时的秘钥";
EdDSAEngine edEng = new EdDSAEngine();
EdDSANamedCurveSpec spec = EdDSANamedCurveTable.getByName(ED_25519);
edEng.initVerify(new EdDSAPublicKey(new EdDSAPublicKeySpec(base64Dec(mKey), spec)));
edEng.setParameter(EdDSAEngine.ONE_SHOT_MODE);
edEng.update(data.getBytes());
Boolean isSuccess = edEng.verify(base64Dec(signData));
return isSuccess;
}
/**
* base64解码
*
* @param str
* @return
*/
byte[] base64Dec(String str) {
return Base64.decode(str, Base64.NO_WRAP);
}