왜 Crypt :: CBC (펄)와 OpenSSL (루비)간에 복어 암호화가 다른가요?펄과 루비 간의 복어 암호화의 차이
펄
use Crypt::CBC;
my $cipher = Crypt::CBC->new(-key => 'length32length32length32length32', -cipher => 'Blowfish');
my $ciphertext = $cipher->encrypt_hex('test');
# ciphertext is 53616c7465645f5f409c8b8eb353823c06d9b50537c92e19
루비
require "rubygems"
require "openssl"
cipher = OpenSSL::Cipher::Cipher.new("bf-cbc")
cipher.encrypt
cipher.key = "length32length32length32length32"
result = cipher.update("test") << cipher.final
ciphertext = result.unpack("H*").first
# ciphertext is 16f99115a09e0464
크립트 :: CBC는 기본적으로 출력에 Salted__
을 붙이는 것 같다. 당신은 이것들 사이에 그렇게 다른 일이 무엇인지 설명 할 수 있습니까? OpenSSL이 Crypt :: CBC와 비슷한 방식으로 작동하도록하는 방법이 있습니까?
Perl 스크립트는 실행될 때마다 다른 출력을 생성합니다. "Salted__"다음의 출력에있는 8 바이트는 모듈에서 텍스트를 암호화하는 데 사용 된 소금입니다 (정보가 도움이되는지 모르겠습니다). – mob
@ mob : 실제로 설명합니다. 초기화 벡터입니다. 그렇지 않으면, 주어진 입력은 항상 같은 것을 암호화하여 정보를 공개합니다. Joepestro, 이것은 아마도 "왜 당신 자신의 암호화 프로토콜을 고안하고 있습니까?" – derobert