teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

コメント微修正

2018/02/13 16:19

投稿

退会済みユーザー
answer CHANGED
@@ -1,6 +1,7 @@
1
1
  JS側で生成するivの長さが間違っているようです
2
- また、php側でのencodeも参考してください
2
+ また、php側での複合化使うメソッドが違うようです
3
3
 
4
+
4
5
  下記で動作サンプルになります
5
6
 
6
7
  js

3

質問の形式に近づけて答える

2018/02/13 16:19

投稿

退会済みユーザー
answer CHANGED
@@ -1,72 +1,64 @@
1
- js側の暗号化salt本当にそれでいのでしょか。
1
+ JSで生成するiv長さ間違ってるよです
2
- また、keyを渡しては元も子もな気がします。
2
+ また、php側でのencodeも参考にしてくださ
3
3
 
4
- 下記で動作するので参考してください。
4
+ 下記で動作サンプルなります
5
5
 
6
6
  js
7
7
  ```javascript
8
-
9
8
  // 暗号化用パス
10
- var secretPass = CryptoJS.enc.Utf8.parse('pass')
9
+ var secretPass = CryptoJS.enc.Utf8.parse('pass');
11
10
 
12
11
  // ランダム値生成してsaltを設定
13
- var salt = CryptoJS.lib.WordArray.random(256)
12
+ var salt = CryptoJS.lib.WordArray.random(128 / 16);
14
13
 
15
14
  // 暗号化で使うキーを設定(先ほど作ったsecretPassとsaltを使用)
16
- var key = CryptoJS.PBKDF2(secretPass, salt, {hasher: CryptoJS.algo.SHA512, keySize: 64 / 8, iterations: 1000 })
15
+ var key = CryptoJS.PBKDF2(secretPass, salt, {keySize: 128 / 16, iterations: 1000 });
17
16
 
18
17
  //初期化ベクトル
19
- var iv = CryptoJS.lib.WordArray.random(16);
18
+ var iv = CryptoJS.lib.WordArray.random(128 / 8);
20
19
 
21
20
  //暗号化オプション(IV:初期化ベクトル, CBCモード, パディングモード:PKCS7)
22
- var options = {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7}
21
+ var options = {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7};
23
22
 
24
23
  //暗号化内容のエンコーディングは「UTF-8」
25
- var baseText = CryptoJS.enc.Utf8.parse('IWantToDecryptThisString')
24
+ var baseText = CryptoJS.enc.Utf8.parse('IWantToDecryptThisString');
26
25
 
27
26
  //暗号化
28
- var encrypted = CryptoJS.AES.encrypt(baseText, key, options)
27
+ var encrypted = CryptoJS.AES.encrypt(baseText, key, options);
29
28
 
30
- //////////////////////////////////////////////////////
31
- // 以下サンプル出力結果
32
- //////////////////////////////////////////////////////
33
-
34
- // ZeNonrvklYxYjk4RIEsdCf/92XYISbkVaGd3/OTmCMs=
29
+ // UA2EX1WGut9X0r3KyGvja0rJoTLGGuqt548VqOC2uS4=
35
30
  console.log(CryptoJS.enc.Base64.stringify(encrypted.ciphertext))
36
31
 
37
- // 6de127c2abfd0899d219e0bbb1ba427c2f0f60e54fd55dee6a25fe50c4b19aedc4305d9a5d461ee82b372c042bfe696b30dfcbeb908aaf83329307b0b3898f5062301665b2d7ba71bd120b804a8bb566988b25cb9e688f6dbdcdd9bc3fde011f40d95d6b6908cabf96c61af94ab3f042c49a239aa0556292d367c49034b229d5ac1f389543f503ce5c832b0a2b5daedfa6ab012f48c345033e44d0f5d29eada6919d9e53c275a2cb65e9e93a2b2f1631341ee1076cdc137e4acfb1f199b1e9a9baba2af641e7d5ee3db8cd835c0e38e2be52195754e17ecf39a651c03e576ca1c46dcbb4cd701de356c880c3cdf45fd4ad6ed423d1d57a2c3dcc0e64415b24a0
38
- console.log(CryptoJS.enc.Hex.stringify(salt))
32
+ // 448e82b5ba5ce418b1e89f720af3e0680c8b6958f3050632849dfc028fa8784e
33
+ console.log(CryptoJS.enc.Hex.stringify(key))
39
34
 
40
- // 9985af2f61ddaf8cb6002c893d1ff7a0
35
+ // 6f0d81e8371d8befb39054ae2f969f36
41
36
  console.log(CryptoJS.enc.Hex.stringify(iv))
42
-
43
37
  ```
44
38
 
45
39
  php
46
40
  ```php
41
+ <?php
42
+
47
- function decData( $encData, $iv, $salt ) {
43
+ function decData( $encData, $iv, $key ) {
48
44
  $encData = base64_decode($encData);
49
45
  $iv = hex2bin($iv);
50
- $salt = hex2bin($salt);
46
+ $key = hex2bin($key);
51
47
 
52
48
  // 復号に使うメソッド
53
- $method = 'aes-256-cbc';
49
+ $method = 'AES-256-CBC';
54
50
 
55
51
  // 復号に使うオプション
56
52
  $options = OPENSSL_RAW_DATA;
57
53
 
58
- // 復号key
59
- $key = hash_pbkdf2("sha512", "pass", $salt, 1000, 64);
60
- $key = hex2bin($key);
61
-
62
54
  $decData = openssl_decrypt($encData, $method, $key, OPENSSL_RAW_DATA, $iv);
63
55
 
64
56
  return $decData;
65
57
  }
66
58
 
67
- $encData = "ZeNonrvklYxYjk4RIEsdCf/92XYISbkVaGd3/OTmCMs=";
68
- $iv = "9985af2f61ddaf8cb6002c893d1ff7a0";
69
- $salt = "6de127c2abfd0899d219e0bbb1ba427c2f0f60e54fd55dee6a25fe50c4b19aedc4305d9a5d461ee82b372c042bfe696b30dfcbeb908aaf83329307b0b3898f5062301665b2d7ba71bd120b804a8bb566988b25cb9e688f6dbdcdd9bc3fde011f40d95d6b6908cabf96c61af94ab3f042c49a239aa0556292d367c49034b229d5ac1f389543f503ce5c832b0a2b5daedfa6ab012f48c345033e44d0f5d29eada6919d9e53c275a2cb65e9e93a2b2f1631341ee1076cdc137e4acfb1f199b1e9a9baba2af641e7d5ee3db8cd835c0e38e2be52195754e17ecf39a651c03e576ca1c46dcbb4cd701de356c880c3cdf45fd4ad6ed423d1d57a2c3dcc0e64415b24a0";
59
+ $encData = "UA2EX1WGut9X0r3KyGvja0rJoTLGGuqt548VqOC2uS4=";
60
+ $key = "448e82b5ba5ce418b1e89f720af3e0680c8b6958f3050632849dfc028fa8784e";
61
+ $iv = "6f0d81e8371d8befb39054ae2f969f36";
70
62
 
71
- var_dump(decData( $encData, $iv, $salt ));
63
+ var_dump(decData( $encData, $iv, $key ));
72
64
  ```

2

markdown

2018/02/13 16:17

投稿

退会済みユーザー
answer CHANGED
@@ -4,9 +4,8 @@
4
4
  下記で動作するので参考にしてください。
5
5
 
6
6
  js
7
+ ```javascript
7
8
 
8
- ```
9
-
10
9
  // 暗号化用パス
11
10
  var secretPass = CryptoJS.enc.Utf8.parse('pass')
12
11
 
@@ -44,7 +43,7 @@
44
43
  ```
45
44
 
46
45
  php
47
- ```
46
+ ```php
48
47
  function decData( $encData, $iv, $salt ) {
49
48
  $encData = base64_decode($encData);
50
49
  $iv = hex2bin($iv);

1

コメント修正

2018/02/13 14:11

投稿

退会済みユーザー
answer CHANGED
@@ -28,7 +28,10 @@
28
28
  //暗号化
29
29
  var encrypted = CryptoJS.AES.encrypt(baseText, key, options)
30
30
 
31
+ //////////////////////////////////////////////////////
31
- $('#msg').html(String(encrypted))
32
+ // 以下サンプル出力結果
33
+ //////////////////////////////////////////////////////
34
+
32
35
  // ZeNonrvklYxYjk4RIEsdCf/92XYISbkVaGd3/OTmCMs=
33
36
  console.log(CryptoJS.enc.Base64.stringify(encrypted.ciphertext))
34
37