最近在研究truelicense的时候,发现了一段代码:
private static final String CLASS_NAME = new ObfuscatedString(new long[] {
0x54087D071FCE4840L, 0x50F993D8A5287E71L, 0x3B4F078A163B6812L,
0xE97B3E32094E2DB9L, 0x5C18E921228781ECL, 0xDF350057733EC2A7L
}).toString(); /* => "de.schlichtherle.license.Resources" */
然后很郁闷,这是在干嘛?
这些16进制怎么就转换成字符串了?
然后看了源码,加上搜集些资料,终于明白。
这个ObfuscatedString 就是用来混淆字符串的工具,用来隐藏代码中的文本,以防泄露,比如linux/unix 的strings 等。
用法:
import de.schlichtherle.util.ObfuscatedString;
public class CreateObfuscatedStrings
{
private static final String PUBLIC_KEYSTORE_FILENAME = "hyde.keystore";
public static void main(String[] args)
{
String result = ObfuscatedString.obfuscate("hyde.keystore");
System.out.format("KEYSTORE-FILENAME: %s\n", result);
}
}
可以对任意字符串进行混淆。
就得到下面的结果:
KEYSTORE-FILENAME: new ObfuscatedString(new long[] {0x86DD4DBB5166C13DL, 0x4C79B1CDC313AE09L, 0x1A353051DAF6463BL}).toString() /* => "hyde.keystore" */
然后就可以用最上面的方式写在代码中了。直接输出CLASS_NAME 就可以得到混淆前的文本