当前位置:   article > 正文

IntelliJ IDEA 远程激活服务器搭建教程

idea intellij激活服务器

不建议大家使用此方法激活,若资金允许,请点击https://www.jetbrains.com/idea/buy/购买正版,谢谢合作!

前言

用过 IDEA 的同学应该都知道,这个软件是收费的,对于笔者来说是很贵了,因此只能另寻他法。 我们可以很轻松的从网上找到搭建本地激活服务器的教程,但是每次打开 IDEA 都要先打开激活服务器,太麻烦。 或者从网上找别人搭建好的激活服务器,但是可能某一天突然就用不了了,所以如果有条件还是自己搭建一个激活服务器比较靠谱。

要求

一台可以远程访问的主机 一个 Spring web 项目

动手

打开我们的 Spring 项目,如果没有的话请自行百度教程,添加一个 Controller

  1. @RestController
  2. @RequestMapping("/rpc")
  3. public class LicenseController {
  4. @RequestMapping("/obtainTicket.action")
  5. public String obtainTicket(String salt, String userName) throws Exception {
  6. String content = "<ObtainTicketResponse>" +
  7. "<message></message>" +
  8. "<prolongationPeriod>607875500</prolongationPeriod>" +
  9. "<responseCode>OK</responseCode>" +
  10. "<salt>" + salt + "</salt>" +
  11. "<ticketId>1</ticketId>" +
  12. "<ticketProperties>licensee=" + userName + " licenseType=0 </ticketProperties>" +
  13. "</ObtainTicketResponse>";
  14. return LicenseUtils.rsaSign(content);
  15. }
  16. @RequestMapping("/releaseTicket.action")
  17. public void releaseTicket(HttpServletResponse httpServletResponse) {
  18. httpServletResponse.setStatus(HttpServletResponse.SC_NOT_FOUND);
  19. }
  20. @RequestMapping("ping.action")
  21. public String ping(String salt) throws Exception {
  22. String content = "<PingResponse>" +
  23. "<message></message>" +
  24. "<responseCode>OK</responseCode>" +
  25. "<salt>" + salt + "</salt>" +
  26. "</PingResponse>";
  27. return LicenseUtils.rsaSign(content);
  28. }
  29. }
  30. 复制代码

添加工具类

  1. public class LicenseUtils {
  2. public static String rsaSign(String content) throws Exception {
  3. PrivateKey pk = getPrivateKey();
  4. RSAPrivateKey rpk = (RSAPrivateKey) pk;
  5. byte[] a = hashed(content);
  6. byte[] result = sign(rpk, a);
  7. String mm = byte2HexStr(result).toLowerCase();
  8. return "<!-- " + mm + " -->\n" + content;
  9. }
  10. private static PrivateKey getPrivateKey() throws Exception {
  11. String priKeyData = "MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAt5yrcHAAjhglnCEn" +
  12. "6yecMWPeUXcMyo0+itXrLlkpcKIIyqPw546bGThhlb1ppX1ySX/OUA4jSakHekNP" +
  13. "5eWPawIDAQABAkBbr9pUPTmpuxkcy9m5LYBrkWk02PQEOV/fyE62SEPPP+GRhv4Q" +
  14. "Fgsu+V2GCwPQ69E3LzKHPsSNpSosIHSO4g3hAiEAywlDfGIl6acnakPrmJE0IL8q" +
  15. "vuO3FtsHBrpkUuOnXakCIQDngkKfjV8XwZn3Rv0vl20VAHb/IhwZfhejtsK+XwNo" +
  16. "8wIgGA5n7ZPfdBi3BdM4VeJWb87WrLlkVxPqeDSbcGrCyMkCIQCqdr+XvADI/UTh" +
  17. "TuQepuErFayJMBSAsNe3NFsw0cUxAQIhAIDGWlcQ+qcLc/yJ/Qb3EeiaonnfWs4m" +
  18. "7MHx821EWbGc";
  19. byte[] keyBytes = Base64.getDecoder().decode(priKeyData.getBytes());
  20. PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
  21. KeyFactory keyFactory = KeyFactory.getInstance("RSA");
  22. return keyFactory.generatePrivate(keySpec);
  23. }
  24. private static byte[] hashed(String content) throws NoSuchAlgorithmException {
  25. byte[] bytes = content.getBytes();
  26. MessageDigest digest = MessageDigest.getInstance("MD5");
  27. return digest.digest(bytes);
  28. }
  29. private static byte[] sign(RSAPrivateKey pri, byte[] hashed) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
  30. int hashLen = hashed.length;
  31. byte[] prefix = new byte[]{48, 32, 48, 12, 6, 8, 42, -122, 72, -122, -9, 13, 2, 5, 5, 0, 4, 16};
  32. int tLen = prefix.length + hashLen;
  33. int k = (pri.getModulus().bitLength() + 7) / 8;
  34. byte[] em = new byte[k];
  35. em[1] = (byte) 1;
  36. for (int i = 2; i < k - tLen - 1; i++) {
  37. em[i] = (byte) 0xFF;
  38. }
  39. System.arraycopy(prefix, 0, em, k - tLen, prefix.length);
  40. System.arraycopy(hashed, 0, em, k - hashLen, hashLen);
  41. BigInteger m = new BigInteger(em);
  42. byte[] src = m.modPow(pri.getPrivateExponent(), pri.getModulus()).toByteArray();
  43. int numPaddingBytes = em.length - src.length;
  44. for (int i = 0; i < numPaddingBytes; i++) {
  45. em[i] = 0;
  46. }
  47. if (src.length > em.length) {
  48. System.arraycopy(src, 1, em, numPaddingBytes + 1, src.length - 1);
  49. } else {
  50. System.arraycopy(src, 0, em, numPaddingBytes, src.length);
  51. }
  52. return em;
  53. }
  54. private static String byte2HexStr(byte[] bytes) {
  55. StringBuilder sb = new StringBuilder();
  56. for (byte b : bytes) {
  57. String tmp = Integer.toHexString(b & 0xFF);
  58. sb.append((tmp.length() == 1) ? ("0" + tmp) : tmp);
  59. }
  60. return sb.toString().toUpperCase().trim();
  61. }
  62. }
  63. 复制代码

然后打包,部署。 部署成功后把 IDEA 的激活服务器地址改为你的项目的地址(不带/rpc),就可以愉快的激活 IDEA 了。

福利

如果实在没条件自己搭建服务器,可以用笔者搭建好的激活服务器地址,低调使用,不然可能会被封

http://114.67.154.97

最后重申一下,不建议大家使用此方法激活,若资金允许,请点击https://www.jetbrains.com/idea/buy/购买正版,谢谢合作!

参考 coding.net/u/chenq_/p/…

迁移自我的简书 2017.09.22

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号