java加密和数字签名3 公钥加密

转载: http://blog.csdn.net/jiangzhuzhu/article/details/5205045


最近初步接触了下Java加密和数字签名的相关内容,我学习的过程大概分五步:
1)消息摘要
2)私钥加密
3)公钥加密
4)数字签名
5)数字证书
下面的代码是第三部分:公钥加密
希望能为刚刚接触这个的朋友们省点事


package security;

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import javax.crypto.Cipher;

/**
 * 此例子是一个公钥加密例子,Cipher类使用KeyPairGenerator(顾名思义:一对钥匙生成器)生成的公钥和私钥
 * 
 * 公钥加密也叫不对称加密,不对称算法使用一对密钥对,一个公钥,一个私钥,使用公钥加密的数据,只有私钥能
 * 解开(可用于加密);同时,使用私钥加密的数据,只有公钥能解开(签名)。但是速度很慢(比私钥加密慢100到
 * 1000倍),公钥的主要算法有RSA,还包括Blowfish,Diffie-Helman 等
 */
public class PublicKey {
    public static void main(String[] args) throws Exception {
        
        String before = "asdf";       
        byte[] plainText = before.getBytes("UTF8");
        
        //产生一个RSA密钥生成器KeyPairGenerator(顾名思义:一对钥匙生成器)
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        //定义密钥长度1024位
        keyGen.initialize(1024);
        //通过KeyPairGenerator产生密钥,注意:这里的key是一对钥匙!!
        KeyPair key = keyGen.generateKeyPair();

        //获得一个RSA的Cipher类,使用公钥加密
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
//        System.out.println("/n" + cipher.getProvider().getInfo());

        System.out.println("/n用公钥加密...");
        //Cipher.ENCRYPT_MODE意思是加密,从一对钥匙中得到公钥 key.getPublic()
        cipher.init(Cipher.ENCRYPT_MODE, key.getPublic());
        //用公钥进行加密,返回一个字节流
        byte[] cipherText = cipher.doFinal(plainText);
        //以UTF8格式把字节流转化为String
        String after1 = new String(cipherText, "UTF8");
        System.out.println("用公钥加密完成:"+after1);

        
        //使用私钥解密
        System.out.println("/n用私钥解密...");
        //Cipher.DECRYPT_MODE意思是解密,从一对钥匙中得到私钥 key.getPrivate()
        cipher.init(Cipher.DECRYPT_MODE, key.getPrivate());
        //用私钥进行解密,返回一个字节流
        byte[] newPlainText = cipher.doFinal(cipherText);

        String after2 = new String(newPlainText, "UTF8");
        System.out.println("用私钥解密完成:"+after2);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值