2017-12-26 4 views
0

私は、指定されたキーで文字列に署名するSSLコマンドを持っています: openssl dgst -sha256 -hex -sign key.pem data.txt。私はそれをPHP関数にどのように変換できるのか知りたいです。 PHPの同等のものは、次のようなものでなければなりません: openssl_sign($data, $signature, $key, OPENSSL_ALGO_SHA256)。しかし、unixコマンドは16進数でシグネチャを出力しますが、PHPコマンドが出力するものは実際には得られません。SSLコマンドをPHPに翻訳する

答えて

1

これはopensslコマンドと同じ16進数表現を生成します:基本的に

$signature = ""; 
$data = file_get_contents("data.txt"); 
$key = file_get_contents("key.pem"); 
openssl_sign($data, $signature, $key, OPENSSL_ALGO_SHA256); 
echo bin2hex($signature); 

を、PHPのバージョンは、バイナリバイトを生成しますので、上記の私のコードでは、私はちょうどに出力することをBIN2HEX関数を使用しますopensslコマンドで使用していたのと同じ形式です。

+0

ありがとうございます!私はPHPで有効なキーを生成するのに少し問題があります。私は 'base64_encode(hex2bin($ key))'コマンドを使います。出力例: 'lnFOGfdh2pRSCmjTDJlD5QTnyRGmmFgg01WpT2mI8Ic ='。しかし、これは上記のopenssl_sign関数では受け入れられません。しかし、私はSSLを使用して新しい秘密鍵を生成すると、動作します。 – user2298995

+0

署名をファイルに保存していますか?その場合、opensslコマンドは実際の16進数の出力の前に 'RSA-SHA256(data.txt)='を入れます。 PHPソリューションで同じことをする必要がありますか? – Nick

+0

ご返信ありがとうございます。私は秘密鍵の作成について言及しましたが、署名に署名しませんでした。ですから、問題は、指定された文字列から有効なキー(openssl_signで受け入れられる)を生成する方法です。私の場合、 'base64_encode(hex2bin($ string));'を使ってみましたが、出力がopenssl_signで受け付けられないようです。 – user2298995

関連する問題