Javaコードに埋め込む暗号化用キー生成
ASCII文字だと弱いのでバイナリキーを用意したいけど手動でJavaコード書くなんて骨が折れるので作成。
import java.util.Random; public class BinaryKeyGenerator { /** * @param args [0]=出力するバイト配列の長さ */ public static void main(String[] args) { int len = Integer.parseInt((args.length>0)?args[0]:"256"); if (len % 2 == 1) { System.err.println("長さのパラメータは2の倍数にしてください。"); return; } new BinaryKeyGenerator().run(len); } public void run(int len) { Random r = new Random(); o("private static final byte[] KEY = java.util.Arrays.copyOfRange(("); StringBuilder sb = new StringBuilder(); for (int i = 0; i < len; i++) { if (i % 2 == 0) { sb.append("\\u"); } sb.append(String.format("%02x", r.nextInt(256))); if (i == len-1 || i % 16 == 15) { if (i == len-1) { o(" \"" + sb.toString() + "\""); } else { o(" \"" + sb.toString() + "\" +"); } sb = new StringBuilder(); } } o(" ).getBytes(java.nio.charset.Charset.forName(\"UTF-16\")), 2, 2+"+ len +");"); } private void o(Object o) { System.out.println(o); } }
実行すると、以下のようなコードを標準出力する。
private static final byte[] KEY = java.util.Arrays.copyOfRange(( "\ub98a\ua3ab\u2e98\u8359\uc6be\u77bb\u3446\ufd01" + "\uf5a3\u5149\uad5c\u2d85\ub97a\u2940\ue985\u8753" + "\ud3c2\ud71d\u6065\u9a7d\u4558\ufa19\u355d\ua085" + "\uc3ce\u495a\u4d26\u820a\u6f16\u0c94\u6866\u3830" + "\u7bfc\ub0b4\u5ca6\ucd98\u5861\ueffc\u07f7\u5058" + "\u1ace\ufbc3\uadf9\u1fcf\u3647\u6d5a\u28da\ucc73" + "\ufb0e\ua003\uc875\udfbe\ued88\u22af\ube94\u4907" + "\udd0b\u8f40\ub0f7\u2cd2\u772a\u3f77\u7acb\u1d54" + "\u369f\u5b2d\u06c7\u7915\ub3d8\uf877\u0c5a\ud895" + "\ueab6\ue078\ua8e3\udd62\u5815\u6a1d\uda22\ue9af" + "\ubc5b\ub4a6\u9cd8\u4299\u0b36\u0d08\u89af\u3f6f" + "\u1f8f\u2a66\u165d\u0100\ueeae\uff6d\ude3a\u04ae" + "\u5965\uc359\uf15c\u9549\u1931\ua774\ue2a8\ud2ec" + "\u0d27\u4255\ufd2a\u75ff\ud09b\u96d2\u487d\ufd45" + "\u9c85\ucfad\ud4fd\u464a\u75b6\u961b\u78f3\uc8db" + "\uf913\ud30d\u4104\ue34a\u7e4b\u4fab\ucfaa\ub8fb" ).getBytes(java.nio.charset.Charset.forName("UTF-16")), 2, 2+256);