電子書籍の厳選無料作品が豊富!

教えて下さい。
Windows側でopensslの暗号化結果とPHP上での暗号化結果が異なってしまいます。


Windows側 (コマンドプロンプトにて)
------------------------------------------------------------------------------------
SET /P X="a" < NUL | openssl.exe enc -a -nosalt -k "1" -K "1234567890123456" -aes-256-cbc
------------------------------------------------------------------------------------
実行結果「oWrFclQURpWwu7ROfgYUqA==」

php側
------------------------------------------------------------------------------------
<?php
$input = 'abc';
$raw_output = false;
$method = 'aes-256-cbc';
$password = '1';
$iv = '1234567890123456';
$enc = openssl_encrypt($input, $method, $password, $raw_output, $iv);
print $enc;
?>
------------------------------------------------------------------------------------
実行結果「z2MxaX+/xVEyeYGg/1vu4Q==」

最初はWindows側のダブルクォーテションの問題かな?と思ったんですが
どうやら関係なさそうです。どうにかして同じ結果にしたいんですが
どのようにすれば良いでしょうか?教えて下さい。

質問者からの補足コメント

  • あ!!大変お恥ずかしい。。。
    すいません説明文の誤りです、、、。

    実際には同じ文字列でも異なってしまいます。

    ----------------------------------------------------------------------------------------------
    SET /P X="abc" < NUL | openssl.exe enc -a -nosalt -k "1" -K "1234567890123456" -aes-256-cbc
    ----------------------------------------------------------------------------------------------
    実行結果「m27/G5djWgm8BKB6stFBmQ==」

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/04/21 14:00

A 回答 (2件)

>実際には同じ文字列でも異なってしまいます。



う~ん……試せる環境がないのでアレですが……。

echoの場合は「abc」だけ。
phpでやったものは「abc」に文字列終端のコード(0x00)が付いていた。
とかいうことはありませんか?

バイナリエディタで”abc”に0x00を追加した4バイトのファイルを作成し、
openssl.exeの入力ファイルにそのファイルを指定してみたらどうでしょう??
    • good
    • 0
この回答へのお礼

対応ありがとうございます。

> phpでやったものは「abc」に文字列終端のコード(0x00)が付いていた。
> とかいうことはありませんか?
それは無いと思います。
対象文字列をintger型に変えてもダメだったので、、、。

お礼日時:2015/04/21 15:04

>SET /P X="a" < NUL | openssl.exe enc -a -nosalt -k "1" -K "1234567890123456" -aes-256-cbc



は、入力文字は"a"。

>$input = 'abc';
>$enc = openssl_encrypt($input, $method, $password, $raw_output, $iv);

では、入力文字列は"abc"じゃないですか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!