intellij 시리얼코드

4 minute read

import java.math.BigInteger;

public class RSAEncoder { private final BigInteger privKey; private final BigInteger pubKey; private final int c; private final int d; private int e = 0; private final BigInteger f; private final boolean g;

public RSAEncoder(BigInteger privKey, BigInteger pubKey, int len, boolean newLine) { this.privKey = privKey; this.pubKey = pubKey; this.g = newLine; int privKeyLen = privKey.bitLength(); this.f = new BigInteger(String.valueOf(len)); int i = (int) Math.ceil(privKeyLen / Math.log(len) * Math.log(2.0D)); if (i % 5 != 0) { i = (i / 5 + 1) * 5; } this.d = i; this.c = (privKeyLen / 8 - 1); }

public String encode(byte[] bytes) { int i = bytes.length % this.c; byte[] arrayOfByte = new byte[i == 0 ? bytes.length : bytes.length + this.c - i]; System.arraycopy(bytes, 0, arrayOfByte, this.c - i, bytes.length);

StringBuffer stringBuffer = new StringBuffer(); for (int j = 0; j < arrayOfByte.length; j += this.c) { encode(arrayOfByte, stringBuffer, j, this.c); } return stringBuffer.toString(); }

private void encode(byte[] bytes, StringBuffer stringBuffer, int off, int len) { if (len == 0) { return; } byte[] arrayOfByte = new byte[this.c]; System.arraycopy(bytes, off, arrayOfByte, 0, len); BigInteger localBigInteger1 = new BigInteger(1, arrayOfByte); if (localBigInteger1.compareTo(this.pubKey) >= 0) { throw new IllegalArgumentException(“result is too long”); } BigInteger localBigInteger2 = localBigInteger1.modPow(this.privKey, this.pubKey); stringBuffer.append(a(a(localBigInteger2))); }

private String a(String paramString) { StringBuffer localStringBuffer = new StringBuffer(); for (int i = 0; i < paramString.length(); i++) { a(localStringBuffer); localStringBuffer.append(paramString.charAt(i)); } return localStringBuffer.toString(); }

private String a(BigInteger paramBigInteger) { StringBuffer localStringBuffer = new StringBuffer(); for (int i = 0; i < this.d; i++) { localStringBuffer.insert(0, b(paramBigInteger.mod(this.f))); paramBigInteger = paramBigInteger.divide(this.f); } return localStringBuffer.toString(); }

private void a(StringBuffer paramStringBuffer) { if ((this.e > 0) && (this.e % 5 == 0)) { if (this.e % 30 == 0) paramStringBuffer.append(‘\n’); else if (this.g) { paramStringBuffer.append(‘-‘); } } this.e += 1; }

private static char b(BigInteger paramBigInteger) { int i = paramBigInteger.intValue(); char c1; if (i < 10) { c1 = (char)(48 + i); } else { if (i < 36) { c1 = (char)(65 + i - 10); } else { if (i < 62) c1 = (char)(97 + i - 36); else { c1 = (char)(33 + i - 62); } } } return c1; } }

dd

import java.math.BigInteger; import java.util.Random; import java.util.zip.CRC32;

/** * Created by rover12421 on 11/18/14. */ public class GenericKeyMaker {

public static final int LICENSETYPE_COMMERCIAL = 0; public static final int LICENSETYPE_NON_COMMERCIAL = 1; public static final int LICENSETYPE_SITE = 2; public static final int LICENSETYPE_OPENSOURCE = 3; public static final int LICENSETYPE_PERSONAL = 4; public static final int LICENSETYPE_YEARACADEMIC = 5;

public static final int PRODUCTID_RubyMine = 4; public static final int PRODUCTID_PyCharm = 5; public static final int PRODUCTID_WebStorm = 6; public static final int PRODUCTID_PhpStorm = 7; public static final int PRODUCTID_AppCode = 8;

private Random random = new Random();

private String getLicenseId() { return String.format(“D%sT”, Integer.toString(random.nextInt(90000) + 10000)); }

private 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(); }

private byte[] generateKeyBytes(int licenseType, int productId, int minorVersion, int majorVersion, String userName, int customerId) { byte[] keyBytes = new byte[14]; keyBytes[0] = (byte)((licenseType « 4) + (productId & 0xFF)); keyBytes[1] = (byte)((minorVersion « 4) + (majorVersion & 0xFF)); long time = System.currentTimeMillis() » 16; keyBytes[2] = (byte)(int)(time & 0xFF); keyBytes[3] = (byte)(int)(time » 8 & 0xFF); keyBytes[4] = (byte)(int)(time » 16 & 0xFF); keyBytes[5] = (byte)(int)(time » 24 & 0xFF); long timeDiff = 99*365;

timeDiff &= 65535L; keyBytes[6] = (byte)(int)(timeDiff & 0xFF); keyBytes[7] = (byte)(int)(timeDiff » 8 & 0xFF); keyBytes[8] = 0; keyBytes[9] = 1; keyBytes[10] = 2; keyBytes[11] = 3; keyBytes[12] = 4; keyBytes[13] = 5;

int crc32 = getCRC(userName, customerId, keyBytes); keyBytes[12] = (byte)(crc32 & 0xFF); keyBytes[13] = (byte)(crc32 » 8 & 0xFF);

return keyBytes; }

public String generateKey(BigInteger privKey, BigInteger pubKey, int licenseType, int productId, int minorVersion, int majorVersion, String userName) {

int customerId = random.nextInt(9000) + 1000; byte[] keyBytes = generateKeyBytes(licenseType, productId, minorVersion, majorVersion, userName, customerId);

RSAEncoder encoder = new RSAEncoder(privKey, pubKey, 64, false); String serial = encoder.encode(keyBytes);

serial = “===== LICENSE BEGIN =====\n” + customerId + “-“ + getLicenseId() + “\n” + serial + “\n===== LICENSE END =====”; return serial; }

public String genericPyCharmKey(int minorVersion, int majorVersion, String userName) { BigInteger pubKey = new BigInteger(“D57B0596A03949D9A3BB0CD1F7931E405AE27D0E0AF4E562072B487B0DAB7F0874AA982E5383E75FF13D36CA9D8531AC1FA2ED7B11C8858E821C2D5FB48002DD”, 16); BigInteger privKey = new BigInteger(“406047D02363033D295DB7C0FD8A94DDCD4A6D71B5A622220C8D65DF0DC1409E0BDE26AF66B0AD717406C22FC8BEC3ED88C1B7091BA3443B6BFBA26120DE6A15”, 16);

return generateKey(privKey, pubKey, LICENSETYPE_NON_COMMERCIAL, PRODUCTID_PyCharm, minorVersion, majorVersion, userName); }

public String genericAppCodeKey(int minorVersion, int majorVersion, String userName) { BigInteger pubKey = new BigInteger(“F0DD6995C4BD3223641C79C8608D74F32ED54A8BDAE468EB5AC53F1F1C8925E263F82317356BC73B1C82B520630250212416C99CB39A8B7C2611E35552E166B9”, 16); BigInteger privKey = new BigInteger(“81B5EAEF61A4B584839C26253781D63243CD4F38E3A74FAD3713B3FB7025978538F10E743456F24BB20D5792BFDCB76DB6162C3D5C77DB7B29906CBFC9114EA5”, 16);

return generateKey(privKey, pubKey, LICENSETYPE_NON_COMMERCIAL, PRODUCTID_AppCode, minorVersion, majorVersion, userName); }

public String genericPhpStormKey(int minorVersion, int majorVersion, String userName) { BigInteger pubKey = new BigInteger(“BB62FBB57F105CD61B47AE2290FCB3CE1179942DE171BEDDF6BAA1A521B9368B735C7C931902EBA8DE6D160711A6ECC40F4A5E766E9FCDEE8A38715DB572AD3D”, 16); BigInteger privKey = new BigInteger(“7BFADCB153F59E86E69BC1820B4DB72573786E6B00CB824E57AD59BFE915231972746F47C6FBE0D8D88809DA313C1E4BEAD305AD8AFD31AE116ABCB181FF4F21”, 16);

return generateKey(privKey, pubKey, LICENSETYPE_NON_COMMERCIAL, PRODUCTID_PhpStorm, minorVersion, majorVersion, userName); }

public String genericRubyMineKey(int minorVersion, int majorVersion, String userName) { BigInteger pubKey = new BigInteger(“BB62FBB57F105CD61B47AE2290FCB3CE1179942DE171BEDDF6BAA1A521B9368B735C7C931902EBA8DE6D160711A6ECC40F4A5E766E9FCDEE8A38715DB572AD3D”, 16); BigInteger privKey = new BigInteger(“7BFADCB153F59E86E69BC1820B4DB72573786E6B00CB824E57AD59BFE915231972746F47C6FBE0D8D88809DA313C1E4BEAD305AD8AFD31AE116ABCB181FF4F21”, 16);

return generateKey(privKey, pubKey, LICENSETYPE_NON_COMMERCIAL, PRODUCTID_RubyMine, minorVersion, majorVersion, userName); }

public String genericWebStormKey(int minorVersion, int majorVersion, String userName) { BigInteger pubKey = new BigInteger(“BB62FBB57F105CD61B47AE2290FCB3CE1179942DE171BEDDF6BAA1A521B9368B735C7C931902EBA8DE6D160711A6ECC40F4A5E766E9FCDEE8A38715DB572AD3D”, 16); BigInteger privKey = new BigInteger(“7BFADCB153F59E86E69BC1820B4DB72573786E6B00CB824E57AD59BFE915231972746F47C6FBE0D8D88809DA313C1E4BEAD305AD8AFD31AE116ABCB181FF4F21”, 16);

return generateKey(privKey, pubKey, LICENSETYPE_NON_COMMERCIAL, PRODUCTID_WebStorm, minorVersion, majorVersion, userName); }

public static void main(String[] args) { GenericKeyMaker keyMaker = new GenericKeyMaker(); // System.out.println(keyMaker.genericPyCharmKey(1, 13, “Rover12421”)); // System.out.println(keyMaker.genericPhpStormKey(1, 13, “Rover12421”)); // System.out.println(keyMaker.genericRubyMineKey(1, 13, “Rover12421”)); System.out.println(keyMaker.genericWebStormKey(1, 13, “Rover12421”)); } }