数字签名算法:Rainbow

数字签名算法:Rainbow

Java代码

import base64.Base64;
import org.junit.BeforeClass;
import org.spongycastle.crypto.AsymmetricCipherKeyPair;
import org.spongycastle.crypto.params.AsymmetricKeyParameter;
import org.spongycastle.pqc.crypto.rainbow.*;
import java.security.SecureRandom;

public class RainbowTest {

    private static AsymmetricKeyParameter privateKey = null;
    private static AsymmetricKeyParameter publicKey = null;

    @BeforeClass
    public static void init() {
        RainbowKeyPairGenerator keyPairGenerator = new RainbowKeyPairGenerator();
        RainbowKeyGenerationParameters rbKGParams = new RainbowKeyGenerationParameters(new SecureRandom(), new RainbowParameters());
        keyPairGenerator.initialize(rbKGParams);

        AsymmetricCipherKeyPair keyPair = keyPairGenerator.genKeyPair();

        privateKey =  keyPair.getPrivate();
        RainbowPrivateKeyParameters privKey = (RainbowPrivateKeyParameters) privateKey;

        publicKey = keyPair.getPublic();
        RainbowPublicKeyParameters pubKey = (RainbowPublicKeyParameters) publicKey;

    }

    @org.junit.Test
    public void test() {
        String message = "13120983870";
        RainbowSigner rainbow = new RainbowSigner();

        rainbow.init(true, privateKey);
        byte[] signature = rainbow.generateSignature(message.getBytes());
        System.out.println("message=" + message + ";signature=base64:" + Base64.byteArrayToBase64(signature));

        rainbow.init(false, publicKey);
        boolean result = rainbow.verifySignature(message.getBytes(), signature);
        System.out.println(result);

        result = rainbow.verifySignature("13120983871".getBytes(), signature);
        System.out.println(result);
    }
}
 

运行结果代码 

message=13120983870;signature=base64:SuIF/kR6Wuo6dxe/Uqi3he0ad9G/ezsAim/9OsytQUHV
true
false

Java 标准api方式:

1、java的KeyPairGenerator,PrivateKey,PublicKey接口

2、java的Provider,KeyFactory,Signature接口

 

生成公钥和私钥:BCRainbowPrivateKey,BCRainbowPublicKey,他们分别实现了java的PrivateKey,PublicKey接口,并且私钥ASN.1编码(规范),编码按照PKCS#8标准,公钥ASN.1编码(规范),编码按照X.509标准。见#getEncoded方法实现。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值