質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

5120閲覧

Openssl_decryptでJsのcrypto-jsでAES暗号化したテキストを復号できない

退会済みユーザー

退会済みユーザー

総合スコア0

OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

3クリップ

投稿2020/02/08 13:49

編集2020/02/11 01:09

久しぶりの投稿になります。

この度、crypto-jsで暗号化したテキストを、PHPで復号しようとしています。
しかしfalseがかってきてしまい、取得で来ていません。

crypto-jsでは↓のJsonで取得しています。
{"ct":"TbmXOUQaoxvjy2eDvQyLTw==","iv":"6dbf44da76d651253ccafb880fe4b152","s":"c153176590f0872b"}

また、コードは下記のように作成しました。

$encoded = 'TbmXOUQaoxvjy2eDvQyLTw=='; $key = 'c153176590f0872b'; $iv = '6dbf44da76d651253ccafb880fe4b152'; openssl_decrypt($encoded, 'AES-128-CBC', $key, 0, $iv);

上記のopenssl_decryptの結果取得したいテキストはpasspassです。

ご教授いただけますと幸いです。
何卒よろしくお願いいたします。

crypto-js

crypto-js

Jsで行っていること

CryptoJS.AES.encrypt(plaintext, secret(), option).toString(); encrypt: function (cipher, message, key, cfg) { // Apply config defaults cfg = this.cfg.extend(cfg); // Encrypt var encryptor = cipher.createEncryptor(key, cfg); var ciphertext = encryptor.finalize(message); // Shortcut var cipherCfg = encryptor.cfg; // Create and return serializable cipher params return CipherParams.create({ ciphertext: ciphertext, key: key, iv: cipherCfg.iv, algorithm: cipher, mode: cipherCfg.mode, padding: cipherCfg.padding, blockSize: cipher.blockSize, formatter: cfg.format }); }

↑で暗号化を行っています。

optionの中身

const option = { format: { stringify(cipherParams) { // create json object with ciphertext const jsonObj = { ct: cipherParams.ciphertext.toString(CryptoJS.enc.Base64) }; // optionally add iv and salt if (cipherParams.iv) { jsonObj.iv = cipherParams.iv.toString(); } if (cipherParams.salt) { jsonObj.s = cipherParams.salt.toString(); } // stringify json object return JSON.stringify(jsonObj); }, parse(jsonStr) { // parse json string const jsonObj = JSON.parse(jsonStr); // extract ciphertext from json object, and create cipher params object const cipherParams = CryptoJS.lib.CipherParams.create({ ciphertext: CryptoJS.enc.Base64.parse(jsonObj.ct) }); // optionally extract iv and salt if (jsonObj.iv) { cipherParams.iv = CryptoJS.enc.Hex.parse(jsonObj.iv) } if (jsonObj.s) { cipherParams.salt = CryptoJS.enc.Hex.parse(jsonObj.s) } return cipherParams; } } };

block and paddingなどについて

padding : 2 unpadding : 1 blockSize : 4 mode : processBlock : 2 algorithm : keysize : 8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/10 10:34

openssl_get_cipher_methods の実行結果
退会済みユーザー

退会済みユーザー

2020/02/11 00:53

ご質問ありがとうございます。 以下が出力されました。 ``` [0]=> string(11) "AES-128-CBC" [1]=> string(11) "AES-128-CFB" [2]=> string(12) "AES-128-CFB1" [3]=> string(12) "AES-128-CFB8" [4]=> string(11) "AES-128-CTR" [5]=> string(11) "AES-128-ECB" [6]=> string(11) "AES-128-OFB" [7]=> string(11) "AES-128-XTS" [8]=> string(11) "AES-192-CBC" [9]=> string(11) "AES-192-CFB" [10]=> string(12) "AES-192-CFB1" [11]=> string(12) "AES-192-CFB8" [12]=> string(11) "AES-192-CTR" [13]=> string(11) "AES-192-ECB" [14]=> string(11) "AES-192-OFB" [15]=> string(11) "AES-256-CBC" [16]=> string(11) "AES-256-CFB" [17]=> string(12) "AES-256-CFB1" [18]=> string(12) "AES-256-CFB8" [19]=> string(11) "AES-256-CTR" [20]=> string(11) "AES-256-ECB" [21]=> string(11) "AES-256-OFB" [22]=> string(11) "AES-256-XTS" [23]=> string(6) "BF-CBC" [24]=> string(6) "BF-CFB" [25]=> string(6) "BF-ECB" [26]=> string(6) "BF-OFB" [27]=> string(16) "CAMELLIA-128-CBC" [28]=> string(16) "CAMELLIA-128-CFB" [29]=> string(17) "CAMELLIA-128-CFB1" [30]=> string(17) "CAMELLIA-128-CFB8" [31]=> string(16) "CAMELLIA-128-ECB" [32]=> string(16) "CAMELLIA-128-OFB" [33]=> string(16) "CAMELLIA-192-CBC" [34]=> string(16) "CAMELLIA-192-CFB" [35]=> string(17) "CAMELLIA-192-CFB1" [36]=> string(17) "CAMELLIA-192-CFB8" [37]=> string(16) "CAMELLIA-192-ECB" [38]=> string(16) "CAMELLIA-192-OFB" [39]=> string(16) "CAMELLIA-256-CBC" [40]=> string(16) "CAMELLIA-256-CFB" [41]=> string(17) "CAMELLIA-256-CFB1" [42]=> string(17) "CAMELLIA-256-CFB8" [43]=> string(16) "CAMELLIA-256-ECB" [44]=> string(16) "CAMELLIA-256-OFB" [45]=> string(9) "CAST5-CBC" [46]=> string(9) "CAST5-CFB" [47]=> string(9) "CAST5-ECB" [48]=> string(9) "CAST5-OFB" [49]=> string(7) "DES-CBC" [50]=> string(7) "DES-CFB" [51]=> string(8) "DES-CFB1" [52]=> string(8) "DES-CFB8" [53]=> string(7) "DES-ECB" [54]=> string(7) "DES-EDE" [55]=> string(11) "DES-EDE-CBC" [56]=> string(11) "DES-EDE-CFB" [57]=> string(11) "DES-EDE-OFB" [58]=> string(8) "DES-EDE3" [59]=> string(12) "DES-EDE3-CBC" [60]=> string(12) "DES-EDE3-CFB" [61]=> string(13) "DES-EDE3-CFB1" [62]=> string(13) "DES-EDE3-CFB8" [63]=> string(12) "DES-EDE3-OFB" [64]=> string(7) "DES-OFB" [65]=> string(8) "DESX-CBC" [66]=> string(8) "IDEA-CBC" [67]=> string(8) "IDEA-CFB" [68]=> string(8) "IDEA-ECB" [69]=> string(8) "IDEA-OFB" [70]=> string(10) "RC2-40-CBC" [71]=> string(10) "RC2-64-CBC" [72]=> string(7) "RC2-CBC" [73]=> string(7) "RC2-CFB" [74]=> string(7) "RC2-ECB" [75]=> string(7) "RC2-OFB" [76]=> string(3) "RC4" [77]=> string(6) "RC4-40" [78]=> string(12) "RC4-HMAC-MD5" [79]=> string(8) "SEED-CBC" [80]=> string(8) "SEED-CFB" [81]=> string(8) "SEED-ECB" [82]=> string(8) "SEED-OFB" [83]=> string(11) "aes-128-cbc" [84]=> string(11) "aes-128-ccm" [85]=> string(11) "aes-128-cfb" [86]=> string(12) "aes-128-cfb1" [87]=> string(12) "aes-128-cfb8" [88]=> string(11) "aes-128-ctr" [89]=> string(11) "aes-128-ecb" [90]=> string(11) "aes-128-gcm" [91]=> string(11) "aes-128-ofb" [92]=> string(11) "aes-128-xts" [93]=> string(11) "aes-192-cbc" [94]=> string(11) "aes-192-ccm" [95]=> string(11) "aes-192-cfb" [96]=> string(12) "aes-192-cfb1" [97]=> string(12) "aes-192-cfb8" [98]=> string(11) "aes-192-ctr" [99]=> string(11) "aes-192-ecb" [100]=> string(11) "aes-192-gcm" [101]=> string(11) "aes-192-ofb" [102]=> string(11) "aes-256-cbc" [103]=> string(11) "aes-256-ccm" [104]=> string(11) "aes-256-cfb" [105]=> string(12) "aes-256-cfb1" [106]=> string(12) "aes-256-cfb8" [107]=> string(11) "aes-256-ctr" [108]=> string(11) "aes-256-ecb" [109]=> string(11) "aes-256-gcm" [110]=> string(11) "aes-256-ofb" [111]=> string(11) "aes-256-xts" [112]=> string(6) "bf-cbc" [113]=> string(6) "bf-cfb" [114]=> string(6) "bf-ecb" [115]=> string(6) "bf-ofb" [116]=> string(16) "camellia-128-cbc" [117]=> string(16) "camellia-128-cfb" [118]=> string(17) "camellia-128-cfb1" [119]=> string(17) "camellia-128-cfb8" [120]=> string(16) "camellia-128-ecb" [121]=> string(16) "camellia-128-ofb" [122]=> string(16) "camellia-192-cbc" [123]=> string(16) "camellia-192-cfb" [124]=> string(17) "camellia-192-cfb1" [125]=> string(17) "camellia-192-cfb8" [126]=> string(16) "camellia-192-ecb" [127]=> string(16) "camellia-192-ofb" [128]=> string(16) "camellia-256-cbc" [129]=> string(16) "camellia-256-cfb" [130]=> string(17) "camellia-256-cfb1" [131]=> string(17) "camellia-256-cfb8" [132]=> string(16) "camellia-256-ecb" [133]=> string(16) "camellia-256-ofb" [134]=> string(9) "cast5-cbc" [135]=> string(9) "cast5-cfb" [136]=> string(9) "cast5-ecb" [137]=> string(9) "cast5-ofb" [138]=> string(7) "des-cbc" [139]=> string(7) "des-cfb" [140]=> string(8) "des-cfb1" [141]=> string(8) "des-cfb8" [142]=> string(7) "des-ecb" [143]=> string(7) "des-ede" [144]=> string(11) "des-ede-cbc" [145]=> string(11) "des-ede-cfb" [146]=> string(11) "des-ede-ofb" [147]=> string(8) "des-ede3" [148]=> string(12) "des-ede3-cbc" [149]=> string(12) "des-ede3-cfb" [150]=> string(13) "des-ede3-cfb1" [151]=> string(13) "des-ede3-cfb8" [152]=> string(12) "des-ede3-ofb" [153]=> string(7) "des-ofb" [154]=> string(8) "desx-cbc" [155]=> string(13) "id-aes128-CCM" [156]=> string(13) "id-aes128-GCM" [157]=> string(14) "id-aes128-wrap" [158]=> string(13) "id-aes192-CCM" [159]=> string(13) "id-aes192-GCM" [160]=> string(14) "id-aes192-wrap" [161]=> string(13) "id-aes256-CCM" [162]=> string(13) "id-aes256-GCM" [163]=> string(14) "id-aes256-wrap" [164]=> string(24) "id-smime-alg-CMS3DESwrap" [165]=> string(8) "idea-cbc" [166]=> string(8) "idea-cfb" [167]=> string(8) "idea-ecb" [168]=> string(8) "idea-ofb" [169]=> string(10) "rc2-40-cbc" [170]=> string(10) "rc2-64-cbc" [171]=> string(7) "rc2-cbc" [172]=> string(7) "rc2-cfb" [173]=> string(7) "rc2-ecb" [174]=> string(7) "rc2-ofb" [175]=> string(3) "rc4" [176]=> string(6) "rc4-40" [177]=> string(12) "rc4-hmac-md5" [178]=> string(8) "seed-cbc" [179]=> string(8) "seed-cfb" [180]=> string(8) "seed-ecb" [181]=> string(8) "seed-ofb" ```
guest

回答1

0

エラーが出ているはずです。まずそれを理解するところから始めましょう。
JavaScript 側で何をやったのかも追記すると良いです

その後で、こちらを参照すると良さそうです。
Encrypt with CryptoJS and decrypt with PHP

JavaScript 側の出力が調整できない場合、結構ヤッカイなようです。

投稿2020/02/08 14:13

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/10 09:54

ご指摘ありがとうございます。 Javascript側の処理を追記しました。 Javascript側の出力結果は調整できないので、難しいのかもしれません
退会済みユーザー

退会済みユーザー

2020/02/10 23:08

CryptoJS の option の中身が無いと難しいと思います。 特に Block Modes and Padding がどうなっているのか? あと、AES-128-CBC はどこから出てきました?
退会済みユーザー

退会済みユーザー

2020/02/11 01:09

情報として提示しているものが正しければよいのですが、 padding : 2 unpadding : 1 blockSize : 4 mode : processBlock : 2 algorithm : keysize : 8 のようになっています。
退会済みユーザー

退会済みユーザー

2020/02/11 02:01

"s" を key としていますが、salt のようです。 これ、ドキュメントとか無いんですか? 解析しながら作成するようなものではないので、仕様が分かっていないと見る気になりません。
退会済みユーザー

退会済みユーザー

2020/02/11 04:06

key すらわからないのであれば、復号は無理ですね。 諦めるしか無いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問