16進形式から元の秘密鍵を取得する
-
05-07-2019 - |
質問
これは、AES暗号化に使用される秘密鍵の16進形式です
00010203050607080A0B0C0D0F101112
これから元のSecretKey形式またはバイト配列を生成できますか?
もしそうなら?
解決
Apache Commons Codecを使用して16進デコードを実行できます
http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html#decodeHex(char [])
ライブラリを使用したくない場合は、これを行うこともできます、
byte[] bytes = new BigInteger("7F" + str, 16).toByteArray();
SecretKeySpec key = new SecretKeySpec(bytes, 1, bytes.length-1, "AES");
BigIntegerが先行ゼロを削除したり、符号付きバイトを追加したりするのを防ぐには、余分なバイト0x7Fを追加する必要があります。
他のヒント
A SecretKey
はインターフェースです。実装はどのタイプでしたか? J2SEには、 KerberosKey
および SecretKeySpec
、どちらもパラメーターとしてバイト配列を持つコンストラクターを持っています。
元のSecretKey形式は何ですか?
byte []
に-128〜127の値の符号付きバイトが含まれていることをご存知ですか?
これを試してみたら痛いでしょうか:
byte[] key = {
0x00,0x01,0x02,0x03,0x05,0x06,0x07,0x08,
0x0A,0x0B,0x0C,0x0D,0x0F,0x10,0x11,0x12
};
注:0x80-0xFFのような値がある場合、範囲に関する警告を避けるために、それらを(byte)0x80-(byte)0xFFとしてキャストする必要があります。
所属していません StackOverflow