私はいくつかのCrytoJSの例を見てきましたが、私の解読の仕事はできませんでした。私は鍵(13文字の長さ、それが重要な場合)とiv(Base64のデコード後の長さ16)を解読する必要があります。私は(あなたがそれらを実行する場合、これらは動作しません - キーはもちろん、変更されています:))完璧に動作します。このPHPの例を見つけました:AES-256(CBC) - 不正な形式のUtf-8データを解読することができません
$encrypted = urldecode('6x5Mex1DqqFK0Z9F%2F6W1FNB55UM%2Baoyjw6NgTwDDmHpVytJXNyQsA3J8jh3R4qt5MbKITzIORGLtgmfknUNLaBhBaBO%2F8GiFPT8A6wVgtQ6YOXkJHG8S9VKYgrN9MCeT0e8mbWMNfkkJ0ips4K87ZNzC6Lb5dbT1%2BRMw%2BpmCP7M8%2FwiBMdJZ%2FdINblg%2FapHtaqv6TUBRukB%2FEJWgGFB86h5fJ8VNZKssWtx35gLo6IHai6GTQpyS%2FNeq5ZbX%2BJwcnCKOzudHsdAyxk%2BQYltupFNBXBzxxW%2Fiixtew7uNtRJQfy2epcx0SOqRGKQfJrRReFWvldJWSKz%2Bv0aRMdZWCVRHovcwPLdXNWSK%2Brs7G0LCnjji4RyqzU9DTy%2BijA1Xx3xVmOxXysCkvqXNg2P0LJ0O0qLJF9lfQb%2FrrPH3h3lB0a7737CTzQh5kuqK%2FNabfV8qLNyV6cJ5oQWMfXw4LRxDIeK9Me8Fnb2K44uC39Q%3D');
$iv = urldecode('MkQ4NUFGNkVBNjIwMEY5OQ%3D%3D');
$secretKey = "ABCDEFGHIJKL";
// decrypt the body...
$decrypted = trim(
mcrypt_decrypt(MCRYPT_RIJNDAEL_128,
substr(sha1($secretKey), 0, 32),
base64_decode($encrypted),
MCRYPT_MODE_CBC,
base64_decode($iv)
), "\0..\32");
print("Decrypted: $decrypted");
そして今、私はCryptoJSに似た何かをしようとしていますが、エラーMalformed Utf-8 data
得続ける:
var encrypted = decodeURIComponent('6x5Mex1DqqFK0Z9F%2F6W1FNB55UM%2Baoyjw6NgTwDDmHpVytJXNyQsA3J8jh3R4qt5MbKITzIORGLtgmfknUNLaBhBaBO%2F8GiFPT8A6wVgtQ6YOXkJHG8S9VKYgrN9MCeT0e8mbWMNfkkJ0ips4K87ZNzC6Lb5dbT1%2BRMw%2BpmCP7M8%2FwiBMdJZ%2FdINblg%2FapHtaqv6TUBRukB%2FEJWgGFB86h5fJ8VNZKssWtx35gLo6IHai6GTQpyS%2FNeq5ZbX%2BJwcnCKOzudHsdAyxk%2BQYltupFNBXBzxxW%2Fiixtew7uNtRJQfy2epcx0SOqRGKQfJrRReFWvldJWSKz%2Bv0aRMdZWCVRHovcwPLdXNWSK%2Brs7G0LCnjji4RyqzU9DTy%2BijA1Xx3xVmOxXysCkvqXNg2P0LJ0O0qLJF9lfQb%2FrrPH3h3lB0a7737CTzQh5kuqK%2FNabfV8qLNyV6cJ5oQWMfXw4LRxDIeK9Me8Fnb2K44uC39Q%3D');
var iv = decodeURIComponent('MkQ4NUFGNkVBNjIwMEY5OQ%3D%3D');
var encrypted = CryptoJS.enc.Base64.parse(encrypted);
var ive = CryptoJS.enc.Base64.parse(iv);
var secretOne = "CLICKBANKINFS";
var secretTwo = CryptoJS.SHA1(secretOne);
var secretThree = secretTwo.toString().substring(0,32);
var decrypted = CryptoJS.AES.decrypt(encrypted, secretThree,
{
iv: ive,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
);
console.log(decrypted.toString(CryptoJS.enc.Utf8));
に暗号化されたテキストおよび静脈の両方にBase64がエンコードされています。どのようにこれが正確に処理されるのか分かりません。私はCryptoJS解読のいくつかの実装を見てきましたが、いくつかの組み合わせを試みましたが、何も私のために働いていませんでした。
何か助けてください。 :)この
ここで、あなたのJavaScriptコードでは 'iv'を使用していますか?また、 'CryptoJS.enc.Base64.parse'を見てください。 – Blender
@Blender JSコードはPHPコードの直後にあります。はい、私は 'CryptoJS.enc.Base64.parse'を見て、それを使っていましたが、それは私にとってはうまくいかなかったのです。 – dotslash
私はそれがすぐ後であることを知っていますが、あなたはそれをPHPコードのほぼ同等の機能として投稿しています。 JSコードでは、実際には 'iv'変数を使用することはありません。最初に* exact *値が 'mcrypt_decrypt'に渡される方法と、' key'と 'iv'をあなたのJSコードの中からどのように変換するのかを最初に考えてみましょう。今のように、あなたのコードは実際の暗号化キー( 'substr(sha1($ secretKey)、0、32)')を派生しません。 – Blender