首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

JAVA兑现RSA加密过程

2012-11-14 
JAVA实现RSA加密过程用JAVA实现RSA加密过程,有以下几个步骤:1、甲方构建密钥对(公钥和私钥,公钥给对方,私钥

JAVA实现RSA加密过程
用JAVA实现RSA加密过程,有以下几个步骤:
    1、甲方构建密钥对(公钥和私钥,公钥给对方,私钥留给自己)
    2、甲方使用私钥加密数据,然后用私钥对加密后的数据签名,并把这些发送给乙方;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。
    3、乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密数据,通过私钥解密。

package com.rsa.core;import java.security.Key;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.security.interfaces.RSAPrivateKey;import java.security.interfaces.RSAPublicKey;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import javax.crypto.Cipher;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;public class RSACoder {public static PublicKey getPublicKey(String key) throws Exception {byte[] keyBytes;keyBytes = (new BASE64Decoder()).decodeBuffer(key);X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance("RSA");PublicKey publicKey = keyFactory.generatePublic(keySpec);return publicKey;}public static PrivateKey getPrivateKey(String key) throws Exception {byte[] keyBytes;keyBytes = (new BASE64Decoder()).decodeBuffer(key);PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey privateKey = keyFactory.generatePrivate(keySpec);return privateKey;}/*** 得到密钥字符串(经过base64编码)* @return*/public static String getKeyString(Key key) throws Exception {byte[] keyBytes = key.getEncoded();String s = (new BASE64Encoder()).encode(keyBytes);return s;}public static void main(String[] args) throws Exception {KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");//密钥位数keyPairGen.initialize(1024);//密钥对KeyPair keyPair = keyPairGen.generateKeyPair();// 公钥PublicKey publicKey = (RSAPublicKey) keyPair.getPublic();// 私钥PrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();String publicKeyString = getKeyString(publicKey);System.out.println("public:\n" + publicKeyString);String privateKeyString = getKeyString(privateKey);System.out.println("private:\n" + privateKeyString);//加解密类Cipher cipher = Cipher.getInstance("RSA");//Cipher.getInstance("RSA/ECB/PKCS1Padding");//明文byte[] plainText = "91686280721609".getBytes();//加密cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] enBytes = cipher.doFinal(plainText);String s1 = new String(enBytes);System.out.println("加密后的密文:" + s1);//通过密钥字符串得到密钥publicKey = getPublicKey(publicKeyString);privateKey = getPrivateKey(privateKeyString);//解密cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[]deBytes = cipher.doFinal(enBytes);publicKeyString = getKeyString(publicKey);System.out.println("public:\n" +publicKeyString);privateKeyString = getKeyString(privateKey);System.out.println("private:\n" + privateKeyString);String s = new String(deBytes);System.out.println(s);}}

热点排行