From 5db0f01c2158731aecba4b6647e707fbf664d8db Mon Sep 17 00:00:00 2001 From: sjq597 Date: Thu, 6 Aug 2015 23:26:22 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=96=B0=E5=BB=BATool=E5=88=86=E6=94=AF=20?= =?UTF-8?q?IDEA=E6=B3=A8=E5=86=8C=E6=9C=BA=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JavaPracticeCode.iml | 2 + pom.xml | 2 +- .../java/com/learn/note/practice/App.java | 13 -- .../note/practice/ideakeygen/Keygen.java | 120 ++++++++++++++++++ .../learn/note/practice/ideakeygen/README.MD | 7 + .../java/com/learn/note/practice/AppTest.java | 38 ------ .../note/practice/ideakeygen/KeygenTest.java | 13 ++ 7 files changed, 143 insertions(+), 52 deletions(-) delete mode 100644 src/main/java/com/learn/note/practice/App.java create mode 100644 src/main/java/com/learn/note/practice/ideakeygen/Keygen.java create mode 100644 src/main/java/com/learn/note/practice/ideakeygen/README.MD delete mode 100644 src/test/java/com/learn/note/practice/AppTest.java create mode 100644 src/test/java/com/learn/note/practice/ideakeygen/KeygenTest.java diff --git a/JavaPracticeCode.iml b/JavaPracticeCode.iml index 8979886..f1a08d5 100644 --- a/JavaPracticeCode.iml +++ b/JavaPracticeCode.iml @@ -11,5 +11,7 @@ + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 407125c..25f81a3 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ junit junit - 3.8.1 + 4.10 test diff --git a/src/main/java/com/learn/note/practice/App.java b/src/main/java/com/learn/note/practice/App.java deleted file mode 100644 index 25057b4..0000000 --- a/src/main/java/com/learn/note/practice/App.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.learn.note.practice; - -/** - * Hello world! - * - */ -public class App -{ - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); - } -} diff --git a/src/main/java/com/learn/note/practice/ideakeygen/Keygen.java b/src/main/java/com/learn/note/practice/ideakeygen/Keygen.java new file mode 100644 index 0000000..e8085c3 --- /dev/null +++ b/src/main/java/com/learn/note/practice/ideakeygen/Keygen.java @@ -0,0 +1,120 @@ +package com.learn.note.practice.ideakeygen; + +import java.math.BigInteger; +import java.util.Date; +import java.util.zip.CRC32; + +/** + * @author junqiangshen + * @version v1.0. + * @Time Created on 15-8-6. + */ +public class Keygen { + private static final int version = 14; + + /** + * @param s + * @param i + * @param bytes + * @return + */ + public static short getCRC(String s, int i, byte bytes[]) { + CRC32 crc32 = new CRC32(); + if (s != null) { + for (int j = 0; j < s.length(); j++) { + char c = s.charAt(j); + crc32.update(c); + } + } + crc32.update(i); + crc32.update(i >> 8); + crc32.update(i >> 16); + crc32.update(i >> 24); + for (int k = 0; k < bytes.length - 2; k++) { + byte byte0 = bytes[k]; + crc32.update(byte0); + } + return (short) (int) crc32.getValue(); + } + + /** + * @param biginteger + * @return String + */ + public static String encodeGroups(BigInteger biginteger) { + BigInteger beginner1 = BigInteger.valueOf(0x39aa400L); + StringBuilder sb = new StringBuilder(); + for (int i = 0; biginteger.compareTo(BigInteger.ZERO) != 0; i++) { + int j = biginteger.mod(beginner1).intValue(); + String s1 = encodeGroup(j); + if (i > 0) { + sb.append("-"); + } + sb.append(s1); + biginteger = biginteger.divide(beginner1); + } + return sb.toString(); + } + + /** + * @param i + * @return + */ + public static String encodeGroup(int i) { + StringBuilder sb = new StringBuilder(); + for (int j = 0; j < 5; j++) { + int k = i % 36; + char c; + if (k < 10) { + c = (char) (48 + k); + } else { + c = (char) ((65 + k) - 10); + } + sb.append(c); + i /= 36; + } + return sb.toString(); + } + + /** + * @param name + * @param days + * @param id + * @return + */ + public static String MakeKey(String name, int days, int id) { + id %= 100000; + byte bkey[] = new byte[12]; + bkey[0] = (byte) 1; // Product type: IntelliJ IDEA is 1 + bkey[1] = version; + Date d = new Date(); + long ld = (d.getTime() >> 16); + bkey[2] = (byte) (ld & 255); + bkey[3] = (byte) ((ld >> 8) & 255); + bkey[4] = (byte) ((ld >> 16) & 255); + bkey[5] = (byte) ((ld >> 24) & 255); + days &= 0xffff; + bkey[6] = (byte) (days & 255); + bkey[7] = (byte) ((days >> 8) & 255); + bkey[8] = 105; + bkey[9] = -59; + bkey[10] = 0; + bkey[11] = 0; + int w = getCRC(name, id % 100000, bkey); + bkey[10] = (byte) (w & 255); + bkey[11] = (byte) ((w >> 8) & 255); + BigInteger pow = new BigInteger("89126272330128007543578052027888001981", 10); + BigInteger mod = new BigInteger("86f71688cdd2612ca117d1f54bdae029", 16); + BigInteger k0 = new BigInteger(bkey); + BigInteger k1 = k0.modPow(pow, mod); + String s0 = Integer.toString(id); + String sz = "0"; + while (s0.length() != 5) { + s0 = sz.concat(s0); + } + s0 = s0.concat("-"); + String s1 = encodeGroups(k1); + s0 = s0.concat(s1); + return s0; + } +} diff --git a/src/main/java/com/learn/note/practice/ideakeygen/README.MD b/src/main/java/com/learn/note/practice/ideakeygen/README.MD new file mode 100644 index 0000000..4ba4ae7 --- /dev/null +++ b/src/main/java/com/learn/note/practice/ideakeygen/README.MD @@ -0,0 +1,7 @@ +### IDEA注册码生成算法 + +`public static String MakeKey(String name, int days, int id)`返回一个字符串就是注册码 +`name`就是要注册的Name +`days`注册码过期时间 +`id` 一个id标识,随便填 +测试类中有一个测试,由于是静态方法,直接调用就可以生成注册码了。 diff --git a/src/test/java/com/learn/note/practice/AppTest.java b/src/test/java/com/learn/note/practice/AppTest.java deleted file mode 100644 index 51a391d..0000000 --- a/src/test/java/com/learn/note/practice/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.learn.note.practice; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/src/test/java/com/learn/note/practice/ideakeygen/KeygenTest.java b/src/test/java/com/learn/note/practice/ideakeygen/KeygenTest.java new file mode 100644 index 0000000..6f9ab5a --- /dev/null +++ b/src/test/java/com/learn/note/practice/ideakeygen/KeygenTest.java @@ -0,0 +1,13 @@ +package com.learn.note.practice.ideakeygen; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class KeygenTest { + + @Test + public void testMakeKey() throws Exception { + System.out.println(Keygen.MakeKey("FUCK", 3650, 123)); + } +} \ No newline at end of file From 63cbb4f712c20aefd0f296124541ce362c792a73 Mon Sep 17 00:00:00 2001 From: sjq597 Date: Sat, 8 Aug 2015 00:18:03 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=BF=BD=E7=95=A5=E7=B1=BB=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E6=96=87=E4=BB=B6=E5=A4=B9target?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index fb6851a..a044250 100755 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ # 忽略.idea文件夹下的项目信息文件 -.idea +.idea/ +# 忽略类编译文件夹 +target/