当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
计算机二级辅导:javaRSA加解密
发布时间:2010/3/13 9:10:35 来源:城市学习网 编辑:MOON
  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 {
  /**
  * 得到公钥
  * @param key 密钥字符串(经过base64编码)
  * @throws Exception
  */
  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;
  }
  /**
  * 得到私钥
  * @param key 密钥字符串(经过base64编码)
  * @throws Exception
  */
  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 = "我们都很好!邮件:@sina.com".getBytes();
  //加密
  cipher.init(Cipher.ENCRYPT_MODE, publicKey);
  byte enBytes = cipher.doFinal(plainText);
  //通过密钥字符串得到密钥
  publicKey = getPublicKey(publicKeyString);
  privateKey = getPrivateKey(privateKeyString);
  //解密
  cipher.init(Cipher.DECRYPT_MODE, privateKey);
  bytedeBytes = 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);
  }
  }
  :
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved