用JDK7新实现的椭圆曲线加密算法对数据进行校验

JDK7新实现了椭圆曲线加密算法(EC)。以前没有EC,只能借助第三方库,比如bouncy-castle。现在有了就简单一些。遗憾的是目前只实现了数据校验(Signature),而没有实现加密解密(RSA两者都实现了)。

下面是一个例子。首先是一段验证的程序(网上转的)

// Test EC exists
        Provider sunEC = new SunEC();
        Security.addProvider(sunEC);
        for(Service service : sunEC.getServices()) {
            System.out.println(service.getType() + ": "
                    + service.getAlgorithm());
        }

输出结果是

KeyFactory: EC
AlgorithmParameters: EC
Signature: NONEwithECDSA
Signature: SHA1withECDSA
Signature: SHA256withECDSA
Signature: SHA384withECDSA
Signature: SHA512withECDSA
KeyPairGenerator: EC
KeyAgreement: ECDH

可见已经实现了EC的签名算法。

下面是个例子,用EC来生成一对密钥,用私钥对数据生成签名,然后用公钥来验证数据是否完整:

     //Create a key pair
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
        keyGen.initialize(256);
        KeyPair keypair = keyGen.genKeyPair();
        PrivateKey privateKey = keypair.getPrivate();
        PublicKey publicKey = keypair.getPublic();

        System.out.println(privateKey + "\n" + publicKey);

        String input = "abc";
        //这里选用上面输出的一个签名算法
        Signature signer = Signature.getInstance("SHA256withECDSA");
        //用生成的私钥初始化签名
        signer.initSign(privateKey);
        signer.update(input.getBytes());
        byte[] sign = signer.sign();
        //得到签名,现在签名可以发给第三方了
        System.out.println("\nSource is " + input);
        System.out.println(" Sign = " + Arrays.toString(sign));

        //现在验证。第三方程序内部保存publicKey。现在拿到了签名和数据。
        Signature verifier = Signature.getInstance("SHA256withECDSA");
        verifier.initVerify(publicKey);       
        //第三方的数据abc,用签名来验证是否和数据一致
        String c = "abc";        
        verifier.update(c.getBytes());       
        boolean b = verifier.verify(sign);       
        System.out.println(" Sign result : " + b);  //输出结果


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值