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 RSAHelper { 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; } 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); 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); } } 

更多相关文章

  1. 百度地图2.1获取密钥配置的Android签名证书的sha1值
  2. 百度地图申请密钥Android SDK
  3. 开源项目Universal Image Loader for Android 说明文档 (2)
  4. Android 限制EditText输入小数点后面位数
  5. android edittext 限制输入框小数位数
  6. android 编译 英文说明文档
  7. android获得密钥
  8. android 生成密钥 签名
  9. Android google地图开发的前期准备(MD5和密钥的获取)

随机推荐

  1. 新建Cocos2d-x工程 vs2010
  2. Android(安卓)运行 C/C++程序 (使用 arm-
  3. Android应用程序获得root权限 && 基于NVi
  4. android开发之使用上下文菜单
  5. Android(安卓)开发技术周报 Issue#292
  6. Android实现基于肤色的皮肤检测
  7. Android(安卓)装置CTS与GMS认证差异
  8. android 笔记 --- Android(安卓)Theme和S
  9. Android(安卓)计时器Timer用法
  10. Android(安卓)X86 虚拟机安装手册