java非对称加密,rsa

 

1.甲方构建密钥对儿,将公钥公布给乙方,将私钥保留。
2.甲方使用私钥加密数据,然后用私钥对加密后的数据签名,发送给乙方签名以及加密后的数据;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。
3.乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密数据,通过私钥解密。
Ps:关于数字签名会在后续的章节中介绍。可以看看这个帖子了解下http://justjavac.iteye.com/blog/1144151

一般公司这样做的。
甲乙公司各有自己的一套公钥私钥。
甲用乙公布的公钥加密,信息传递到乙,乙用自己的私钥解密。 --- 这一套是乙方的公私钥。
乙用甲公布的公钥加密,信息传递到甲,甲用自己的私钥解密。 --- 这一套是甲方的公私钥。
注:公钥长度远远小于私钥,公钥长度比较短,便于公钥保存。

 

package Asymmetric.encryption;

import org.apache.commons.codec.binary.Hex;
import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
/**
 * {@link http://www.cnblogs.com/allanzhang/}
 * @author 小卖铺的老爷爷
 *
 */
public class RSATest {
    public static final String src = "laoyeye rsa";
    public static void main(String[] args) throws Exception {
        jdkRSA();
    }
    public static void jdkRSA() throws Exception {
        //初始化密钥
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(512);//512~65532
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        //私钥加密,公钥解密
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPrivate());
        byte[] result = cipher.doFinal(src.getBytes());
        System.out.println("**私钥加密,公钥解密**");
        System.out.println("加密:" + Hex.encodeHexString(result));
        cipher.init(Cipher.DECRYPT_MODE, keyPair.getPublic());
        result = cipher.doFinal(result);
        System.out.println("解密:" + new String(result));
    }
}

 

posted @ 2024-01-30 10:22  君子笑而不语  阅读(11)  评论(0编辑  收藏  举报