たぷつきません

おなかがでてきた。もうたぷついてるやん。

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);