Curve25519加解密 和 Ed25519加验签的使用

版权声明:本文为博主原创文章,可以随意转载,但请附原地址或原作者名。谢谢! 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);
}

猜你喜欢

转载自blog.csdn.net/farley119/article/details/87875201