Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 

63 строки
2.6 KiB

  1. package com.simple.utils;
  2. import org.apache.commons.codec.binary.Base64;
  3. import javax.crypto.Cipher;
  4. import java.io.ByteArrayOutputStream;
  5. import java.security.Key;
  6. import java.security.KeyFactory;
  7. import java.security.spec.X509EncodedKeySpec;
  8. public class RsaUtil {
  9. public static final String KEY_ALGORITHM = "RSA";
  10. public static final String PUBLIC_KEY = //"-----BEGIN PUBLIC KEY-----" +
  11. "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvh8j/zagfxQdnSh5OIic" +
  12. "MzN+MuRuWQJPjgu4Gza4+gX3j5Ln2xNDBOTjpwyuLBjh/JcBd1cGO3lAaKCwcaix" +
  13. "smhTq56wVXXUMgDiAChu4ud8FSvRc8G8tdZAirKVAIi3NW+/pYgpWBs/0wnF8hz4" +
  14. "8no4pyJHl9Jc1LH3VNIMz8vqzKUPc4ack4pFUXlcNj6C+sBlaurmI4/vwLqNxBGs" +
  15. "7/zyM7dv6oy3DSU/Y1qBArM1YPjfL2dNun8rmtPgJvlPwXqA7uoHPwQ2Ym3aUn59" +
  16. "pkS7QI6IE8uuqNkfSte8BXLd2nIqPLFxLYLDmdll7eoyRblHcHqAYSj8stK6StC7" +
  17. "DNryNKEjTEwbgf9trUI0uvF1pfgTy2gpclnY69FtD/m0+FvLyorMq+nmBqYMjka5" +
  18. "K0txDQJPOa7gsi//uXd/cJW2SAXY9MSO1AfMi8Xq/YKRQzN9FW5iapskXFHca7uX" +
  19. "g5NhH7flr6DW+QInFlpoN6WIEAuDF1aj4O49Ikm3WxwhTqnvEkdSCfivpYQkp9Sh" +
  20. "4kQ/SQdxuT7VX+Nz6k+uMx2z4cySk33bHi0KoHbA9QFGg/54Qd0+eU4qZnd4mrgh" +
  21. "hH7/QQhL7Z9eF1U5UPrsHq2Vq3rEnN+tYQ26AuKeU8vzTxBrC/SxC6C/SMFt3f/Y" +
  22. "nuFh1UnNJZleZwyQt+ZdGO0CAwEAAQ==";
  23. //"-----END PUBLIC KEY-----";
  24. private static final int MAX_ENCRYPT_BLOCK = 117;
  25. public static String RSAEncode(byte[] data, String publickey)
  26. throws Exception {
  27. byte[] keyBytes = Base64.decodeBase64(publickey);
  28. X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
  29. KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
  30. Key publicK = keyFactory.generatePublic(x509KeySpec);
  31. // 对数据加密
  32. Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
  33. cipher.init(Cipher.ENCRYPT_MODE, publicK);
  34. int inputLen = data.length;
  35. ByteArrayOutputStream out = new ByteArrayOutputStream();
  36. int offSet = 0;
  37. byte[] cache;
  38. int i = 0;
  39. // 对数据分段加密
  40. while (inputLen - offSet > 0) {
  41. if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
  42. cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
  43. } else {
  44. cache = cipher.doFinal(data, offSet, inputLen - offSet);
  45. }
  46. out.write(cache, 0, cache.length);
  47. i++;
  48. offSet = i * MAX_ENCRYPT_BLOCK;
  49. }
  50. byte[] encryptedData = out.toByteArray();
  51. out.close();
  52. return Base64.encodeBase64String(encryptedData);
  53. }
  54. }