mcrypt_cbcに頭を巻こうとして少し問題があります。使用する40文字のキー(OAuthキー-OAuthライブラリを使用する代わりに手動で暗号化/署名を行う)がありますが、これをどのように使用すべきかわかりません。
最終結果は、SHA256 CBCに暗号化され、base64で暗号化されたjsonペアである必要があります。私が持っているのは..
$key = '123456789012345678901234567890123456789012345678901234567890';
$pair = 'user:pass';
$encrypted = base64_encode(mcrypt_cbc(MCRYPT_RIJNDAEL_128,$key,$pair,MCRYPT_ENCRYPT,""));
これは正しくないと確信していますが、次の質問があります。
PHPのドキュメントを正しく読んだ場合、RIJNDAEL_128はSHA256に使用できます-これは正しいですか?
キーとIVについて..私は次のことも見ました:
$encrypted = base64_encode(mcrypt_cbc(MCRYPT_RIJNDAEL_128,substr($key,0,32),$pair,MCRYPT_ENCRYPT,substr($key,32,16)));
私は少し戸惑っています-最初の32文字はキーに使用され、残りの16文字はIVに使用されますか?IVは常にキーの一部にすぎませんか?そして、これは40文字に対してどのように行われますか?のIVを使用して...
substr($key,32,8)
結果は
The IV parameter must be as long as the blocksize
以下のRubyコードは、私が参照しているAPIの例ですが、Rubyに関しては知識がありません。
def encrypt_aes(data)
sha_key = Digest::SHA2.digest(@secret_key)
aes = OpenSSL::Cipher::Cipher.new("AES-256-CBC")
aes.encrypt
aes.key = sha_key
aes.iv = "\x00" * 16
encrypted = aes.update(data) + aes.final
Base64.encode64(encrypted)
end
どんな指導でも大歓迎です。当時、私はPHPの経験が豊富でしたが、暗号化は常に私の最も弱い分野でした。私が経験した中で最も多いのは、C ++でBotanライブラリを使用することです。それだけでも、さまざまなスニペットを変更したおかげです。