1.
Aptana 是一个非常强大,开源,专注于JavaScript的Ajax开发IDE。它的特性包括: *JavaScript,JavaScript函数,HTML,CSS语言的Code Assist功能。 *Outliner(大纲):显示JavaScript,HTML和CSS的代码结构。
*支持JavaScript,HTML,CSS代码提示,包括JavaScript 自定函数
*代码语法错误提示。
*支持Aptana UI自定义和扩展。
*支持跨平台。
*支持FTP/SFTP
*调试JavaScript
*支持流行AJAX框架的Code Assist功能:AFLAX,Dojo,JQuery,MochiKit,Prototype,Rico,script.aculo.us,Yahoo UI,Ext。
*Adobe AIR与iPhone开发工具
其主页上还提供如何使用该开发工具的视频。
找到com.aptana.ide.core_1.0.1.004323.jar文件
编译下面的文件并替换找上面包中的对应文件(在com.aptana.ide.core.licensing目录下)
修改位置见后面注释部分说明!
package com.aptana.ide.core.licensing;
import java.math.BigInteger;
import java.util.Calendar;
import java.util.TimeZone;
import java.util.zip.CRC32;
public final class ClientKey {
private static class Decrypt {
private BigInteger modulus;
private BigInteger exponent;
public String decrypt(String encrypted) {
long crc32Value;
byte bytes[];
CRC32 crc32;
if (encrypted == null) {
encrypted = "";
} else {
encrypted = ClientKey.trimEncryptedLicense(encrypted);
}
BigInteger big = new BigInteger(encrypted);
BigInteger decrypted = big.modPow(exponent, modulus);
crc32Value = (long) decrypted.intValue() & 0xffffffffL;
decrypted = decrypted.shiftRight(32);
bytes = decrypted.toByteArray();
crc32 = new CRC32();
crc32.update(bytes);
if (crc32Value == crc32.getValue()) {
return new String(bytes);
}
return null;
}
Decrypt(String exponent, String modulus) {
this.modulus = new BigInteger(modulus);
this.exponent = new BigInteger(exponent);
}
}
public static final String BEGIN_LICENSE_MARKER = "--begin-aptana-license--";
public static final String END_LICENSE_MARKER = "--end-aptana-license--";
private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
private static final String EMAILS_NON_MATCHING = "EMAILS_NON_MATCHING";
private static final int PRO = 0;
private static final int TRIAL = 1;
private String email;
private long expiration;
private int type;
private ClientKey(int type, String email, long expiration) {
this.type = type;
this.email = email;
this.expiration = expiration;
}
public static ClientKey decrypt(String encrypted, String email) {
String modulus = "115801190261221214754334668902722425936509505416457970789287297728816388753627896293249501578830570324705253515546383166989625001335561947096747210280001245977114030627247212292377290543869343996595819188362915644707269064020812435233012510929338706599216007185654748959001143012936618501934698642942289379979";
String exponent = "65537";
if (encrypted != null) {
encrypted = encrypted.trim();
}
Decrypt decrypter = new Decrypt(exponent, modulus);
return decrypt(decrypter, encrypted, email);
}
private static ClientKey decrypt(Decrypt decrypter, String encrypted,
String email) {
String value = decrypter.decrypt(encrypted);
if (value == null) {
return new ClientKey(1, null, 0L);
}
String values[] = value.split(";");
int type = 1;
String genedEmail = null;
long expiration = 0L;
if (values.length == 3) {
if ("p".equals(values[0].toLowerCase())) {
type = 0;
}
genedEmail = values[1];
if (genedEmail != null) {
if (!genedEmail.equalsIgnoreCase(email)) {
genedEmail = "EMAILS_NON_MATCHING";
}
} else {
genedEmail = null;
}
try {
expiration = Long.parseLong(values[2]);
} catch (Exception _ex) {
expiration = 0L;
}
}
return new ClientKey(type, genedEmail, expiration);
}
public boolean isCloseToExpiring() {
return false;
}
public boolean isValid() {
return true;
}
public boolean isCloseToMatching() {
return false;
}
public boolean isExpired() {
return false;
}
public String getEmail() {
//把此处的Email修改为你自己的Email地址
return "heimazhao@gmail.com";
}
public Calendar getExpiration() {
Calendar expirationCal = Calendar.getInstance(GMT);
//把此处的时间修改为授权到期时间
expirationCal.set(2010, 9, 9);
return expirationCal;
}
public boolean isTrial() {
return false;
}
public boolean isPro() {
return true;
}
public boolean shouldProPluginsRun() {
return true;
}
public static String trimEncryptedLicense(String encrypted) {
String newEncrypted = encrypted;
newEncrypted = newEncrypted.trim();
newEncrypted = newEncrypted.replaceAll("--begin-aptana-license--", "");
newEncrypted = newEncrypted.replaceAll("--end-aptana-license--", "");
newEncrypted = newEncrypted.replaceAll("/s+", "");
return newEncrypted;
}
}
Aptana 是一个非常强大,开源,专注于JavaScript的Ajax开发IDE。它的特性包括: *JavaScript,JavaScript函数,HTML,CSS语言的Code Assist功能。 *Outliner(大纲):显示JavaScript,HTML和CSS的代码结构。
*支持JavaScript,HTML,CSS代码提示,包括JavaScript 自定函数
*代码语法错误提示。
*支持Aptana UI自定义和扩展。
*支持跨平台。
*支持FTP/SFTP
*调试JavaScript
*支持流行AJAX框架的Code Assist功能:AFLAX,Dojo,JQuery,MochiKit,Prototype,Rico,script.aculo.us,Yahoo UI,Ext。
*Adobe AIR与iPhone开发工具
其主页上还提供如何使用该开发工具的视频。
找到com.aptana.ide.core_1.0.1.004323.jar文件
编译下面的文件并替换找上面包中的对应文件(在com.aptana.ide.core.licensing目录下)
修改位置见后面注释部分说明!
package com.aptana.ide.core.licensing;
import java.math.BigInteger;
import java.util.Calendar;
import java.util.TimeZone;
import java.util.zip.CRC32;
public final class ClientKey {
private static class Decrypt {
private BigInteger modulus;
private BigInteger exponent;
public String decrypt(String encrypted) {
long crc32Value;
byte bytes[];
CRC32 crc32;
if (encrypted == null) {
encrypted = "";
} else {
encrypted = ClientKey.trimEncryptedLicense(encrypted);
}
BigInteger big = new BigInteger(encrypted);
BigInteger decrypted = big.modPow(exponent, modulus);
crc32Value = (long) decrypted.intValue() & 0xffffffffL;
decrypted = decrypted.shiftRight(32);
bytes = decrypted.toByteArray();
crc32 = new CRC32();
crc32.update(bytes);
if (crc32Value == crc32.getValue()) {
return new String(bytes);
}
return null;
}
Decrypt(String exponent, String modulus) {
this.modulus = new BigInteger(modulus);
this.exponent = new BigInteger(exponent);
}
}
public static final String BEGIN_LICENSE_MARKER = "--begin-aptana-license--";
public static final String END_LICENSE_MARKER = "--end-aptana-license--";
private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
private static final String EMAILS_NON_MATCHING = "EMAILS_NON_MATCHING";
private static final int PRO = 0;
private static final int TRIAL = 1;
private String email;
private long expiration;
private int type;
private ClientKey(int type, String email, long expiration) {
this.type = type;
this.email = email;
this.expiration = expiration;
}
public static ClientKey decrypt(String encrypted, String email) {
String modulus = "115801190261221214754334668902722425936509505416457970789287297728816388753627896293249501578830570324705253515546383166989625001335561947096747210280001245977114030627247212292377290543869343996595819188362915644707269064020812435233012510929338706599216007185654748959001143012936618501934698642942289379979";
String exponent = "65537";
if (encrypted != null) {
encrypted = encrypted.trim();
}
Decrypt decrypter = new Decrypt(exponent, modulus);
return decrypt(decrypter, encrypted, email);
}
private static ClientKey decrypt(Decrypt decrypter, String encrypted,
String email) {
String value = decrypter.decrypt(encrypted);
if (value == null) {
return new ClientKey(1, null, 0L);
}
String values[] = value.split(";");
int type = 1;
String genedEmail = null;
long expiration = 0L;
if (values.length == 3) {
if ("p".equals(values[0].toLowerCase())) {
type = 0;
}
genedEmail = values[1];
if (genedEmail != null) {
if (!genedEmail.equalsIgnoreCase(email)) {
genedEmail = "EMAILS_NON_MATCHING";
}
} else {
genedEmail = null;
}
try {
expiration = Long.parseLong(values[2]);
} catch (Exception _ex) {
expiration = 0L;
}
}
return new ClientKey(type, genedEmail, expiration);
}
public boolean isCloseToExpiring() {
return false;
}
public boolean isValid() {
return true;
}
public boolean isCloseToMatching() {
return false;
}
public boolean isExpired() {
return false;
}
public String getEmail() {
//把此处的Email修改为你自己的Email地址
return "heimazhao@gmail.com";
}
public Calendar getExpiration() {
Calendar expirationCal = Calendar.getInstance(GMT);
//把此处的时间修改为授权到期时间
expirationCal.set(2010, 9, 9);
return expirationCal;
}
public boolean isTrial() {
return false;
}
public boolean isPro() {
return true;
}
public boolean shouldProPluginsRun() {
return true;
}
public static String trimEncryptedLicense(String encrypted) {
String newEncrypted = encrypted;
newEncrypted = newEncrypted.trim();
newEncrypted = newEncrypted.replaceAll("--begin-aptana-license--", "");
newEncrypted = newEncrypted.replaceAll("--end-aptana-license--", "");
newEncrypted = newEncrypted.replaceAll("/s+", "");
return newEncrypted;
}
}