1

AES 128 で暗号化された文字列に対して復号化できる JavaScript ライブラリを探しました。私はいくつか見つけました:

私の問題は、これらのアルゴリズムが文字列または HexString のいずれかを入力として受け取ることです。私の入力はバイト配列であるため、私のケースは少し特殊です。Javaでテスト ケースをコーディングしました。

    String key = "MrSShZqHM6dtVNdX";
    String message = "NzZiNGM3ZjIyNjM5ZWM3M2YxMGM5NjgzZDQzZDA3ZTQ=";
    String charsetName = "UTF-8";
    String algo = "AES";

    // decode message
    byte[] decodeBase64 = Base64.decodeBase64(message.getBytes(charsetName));
    System.out.println("decoded message: " + new String(decodeBase64));

    // prepare the key
    SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(charsetName), algo);

    // aes 128 decipher
    Cipher cipher = Cipher.getInstance(algo);
    cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
    byte[] doFinal = cipher.doFinal(Hex.decodeHex(new String(decodeBase64).toCharArray()));
    System.out.println("done with: " + new String(doFinal));

出力は次のとおりです。

decoded message: 76b4c7f22639ec73f10c9683d43d07e4
done with: 390902

しかし、これはJavaですよね?このorg.apache.commons.codec.binary.Hex.decodeHexメソッドは、16 進値を表す文字配列を同じ値のバイト配列に変換します。返される配列は、指定されたバイトを表すのに 2 文字かかるため、渡された配列の長さの半分になります。渡された char 配列の要素数が奇数の場合、例外がスローされます。

10 進数表現では、Hex.decodeHexメソッドは次のバイト配列を提供します。[118, -76, -57, -14, 38, 57, -20, 115, -15, 12, -106, -125, -44, 61, 7, -28];

Java AES デシファーはバイト配列を入力として受け取りますが、Javascript ではそれを行う lib はありません。私はここにあるものを少し調整しようとしましたが、それはハードコアなコードです. これは本当に私の分野ではありません...

私が行った中で最も近いのは、このオンラインツールでした。私のキーはMrSShZqHM6dtVNdX、apache commons Hex.encodeHex を使用すると、4d725353685a71484d366474564e6458 を取得して、3339303930320a0a0a0a0a0a0a0a0a0a の出力を得ることができます。

4

0 に答える 0