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

質問編集履歴

2

暗号化ではなく、復号する際に嵌っています。

2019/05/08 09:41

投稿

hirosnow
hirosnow

スコア16

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  初めまして。
2
- で嵌っているので、お助けいただけますと嬉しいです。
2
+ 号で嵌っているので、お助けいただけますと嬉しいです。
3
3
 
4
4
  ### 前提・実現したいこと
5
5
  使用言語:PHP(7.2.13),JS(Node.js(10.14.1))

1

暗号文をbinaryに変更しました。

2019/05/08 09:41

投稿

hirosnow
hirosnow

スコア16

title CHANGED
@@ -1,1 +1,1 @@
1
- PHP,JS(Node.js)での暗号化,復号につ
1
+ PHPで暗号化,JS(Node.js)で復号ができな
body CHANGED
@@ -6,13 +6,19 @@
6
6
  実現したいこと:PHPで暗号化した文をJS側で復号したい
7
7
 
8
8
  ### 発生している問題・エラーメッセージ
9
+ ###### 修正前
9
10
  ```
10
11
  (node:11944) UnhandledPromiseRejectionWarning: Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
11
12
  ```
13
+ ###### 修正後
14
+ ```
15
+ (node:18364) UnhandledPromiseRejectionWarning: Error: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length
16
+ ```
12
17
 
13
18
  ### 該当のソースコード
14
19
  平文:テスト太郎
15
20
 
21
+ ###### 修正前
16
22
  ```PHP
17
23
  base64_encode(openssl_encrypt($planeText, 'aes-256-ecb', 'testtes'));
18
24
  ```
@@ -36,6 +42,30 @@
36
42
  console.log('decrypted: ' + dec);
37
43
  ```
38
44
 
45
+ ###### 修正後
46
+ ```PHP
47
+ openssl_encrypt($planeText, 'aes-256-ecb', 'testtes', 1);
48
+ ```
49
+
50
+ ```Node
51
+ const crypto = require("crypto");
52
+
53
+ const planeText = 'A4A74C2C8DB1D3E108D5C1A40950CC5B';//平文をPHPで暗号化した文字列
54
+ const buffer = new Buffer(planeText, 'base64');
55
+ const ascii = buffer.toString('ascii');
56
+ console.log('ascii: '+ ascii);
57
+
58
+ const passowrd = 'testtes';
59
+ const alg = 'aes-256-ecb'
60
+ const encoding = 'binary'
61
+
62
+ const decipher = crypto.createDecipher(alg, passowrd);
63
+ let dec = decipher.update(ascii, encoding, 'utf8');
64
+ dec += decipher.final('utf8');
65
+
66
+ console.log('decrypted: ' + dec);
67
+ ```
68
+
39
69
  ### 試したこと
40
70
 
41
71
  https://qiita.com/hm0429/items/2acee723170b32b91304
@@ -45,6 +75,8 @@
45
75
  そもそもPHP側で暗号化した場合とJS側で暗号化した際に文字列が言語ごとで異なる理由がわかりません。
46
76
  (復号方法が違うからなんでしょうが・・・)
47
77
 
78
+ また、PHPで暗号化する際に'base64'せずに'binary'にすることができましたが、修正後でもエラーが出ており上手く動きません。
79
+
48
80
  ### 補足情報(FW/ツールのバージョンなど)
49
81
  暗号化する際に『aes-256-ecb』を使用するのはよくないことは承知しております。
50
82
  ですが、今回は上記を利用したいと考えております。