前提・実現したいこと
phpでopensslで暗号化した文字列をrubyで複合したい。
該当のソースコード
php
1 2<?php 3 4$data = '暗号化したい文字列' 5$key = base64_decode($key); 6// 暗号化方式 7$method = 'AES-256-CTR'; 8// 方式に応じたIV(初期化ベクトル)に必要な長さを取得 9$ivLength = openssl_cipher_iv_length($method); 10 11// IV を自動生成 12$iv = openssl_random_pseudo_bytes($ivLength); 13 14// OPENSSL_RAW_DATA と OPENSSL_ZERO_PADDING を指定可 15$options = 0; 16 17// 暗号化 18$encrypted = openssl_encrypt($data, $method, $key, $options, $iv); 19$encPass = base64_encode($encrypted); 20$encIv = base64_encode($iv); 21 22// $encPass $encIvはDBに格納 23// $key別の場所に格納 24?>
ruby
1require 'base64' 2require 'openssl' 3 4#encPassと$encIvと$passwordをデコード 5#取得する部分は省略。全て正常な値が取得できたこととする。 6decPass = Base64.decode64($encPass) #通常この書き方はないですが、$encPassが取得できたこととする。 7decIv = Base64.decode64($encIv) # 上と同じ 8password = Base64.decode64($password) #上と同じ 9# 復号化器を作成する 10dec = OpenSSL::Cipher.new("AES-256-CTR") 11dec.decrypt 12 13# 鍵とIVを設定する 14dec.key = password #←この部分で落ちてしまいます。 15dec.iv = decIv 16 17# 復号化する 18decrypted_data = "" 19decrypted_data << dec.update(decPass) 20decrypted_data << dec.final 21 22p decrypted_data
試したこと
https://teratail.com/questions/135514
上記で言われているように、長さを取得してみましたが、複合化できず。
https://teratail.com/questions/53617
こちらは近いかなと思ったが、結局rubyでも暗号化していたので、参考にならず。
keyとivで暗号化された文字列は同じ要素があればできると思ったのですが、足りない部分がわかりません。
ご教授の程よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
ruby 2.5.1
php 7.3
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。