Ruby의 OpenSSL 라이브러리를 표준 Linux 명령 줄 openssl과 조정하는 데 어려움이 있습니다.Ruby OpenSSL 대 Linux openssl
는 내가 여기서 할 노력하고있어 암호 는 foobar와 문자열 mysecretstring를 암호화하지만 먼저합니다 (aescrypt gem의 코드를 흉내) SHA256을 사용하여 암호를 해시입니다. 여기
내가 IRB에서 할 것입니다 :
2.0.0-p353 :041 > aes = OpenSSL::Cipher::Cipher.new("AES-256-CBC")
=> #<OpenSSL::Cipher::Cipher:0x000000026b8d50>
2.0.0-p353 :042 > aes.encrypt
=> #<OpenSSL::Cipher::Cipher:0x000000026b8d50>
2.0.0-p353 :043 > aes.key=OpenSSL::Digest::SHA256.new('foobar').digest
=> "\xC3\xAB\x8F\xF17 \xE8\xAD\x90G\xDD9Fk<\x89t\xE5\x92\xC2\xFA8=J9`qL\xAE\xF0\xC4\xF2"
2.0.0-p353 :044 > Base64.encode64(aes.update('mysecretstring')+aes.final)
=> "305V0Kbklj/HoBSK4ferhA==\n"
2.0.0-p353 :045 >
지금까지 너무 좋아. 이제 나는 이것이 리눅스 명령 행에서 openssl로 할 수있는 것과 어떻게 일치하는지보고 싶다. 마지막 두 단계에서 내가 첫 번째 단계에서 암호 '는 foobar'를 해싱하여 얻은 문자열 c3:ab:8f:f1:37:20:e8:ad:90:47:dd:39:46:6b:3c:89:74:e5:92:c2:fa:38:3d:4a:39:60:71:4c:ae:f0:c4:f2
를 붙여
[(master)]$ echo -n "foobar" | openssl dgst -sha256 -c
(stdin)= c3:ab:8f:f1:37:20:e8:ad:90:47:dd:39:46:6b:3c:89:74:e5:92:c2:fa:38:3d:4a:39:60:71:4c:ae:f0:c4:f2
[(master)]$ echo -n "mysecretstring" | openssl enc -e -aes-256-cbc -a
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
U2FsdGVkX18EOcTrTMNQuCRnstUe6oY9b5RLuTOFcNo=
[(master)]$
.
왜 내가 동일한 대답을 얻지 못했고, 더 중요한 것은 리눅스 cmd에서 루비에서 얻은 것을 모방하기 위해 무엇을해야 하는가?
감사 :
그래서 다음 줄을보십시오. 나는 아직도 그것을 얻지 않고있는 I 'm를 추측한다. 정확히 어떻게 iv를 지정합니까? 나는 다음과 같은 것을 시도한다 : echo -n "mysecretstring"| openssl enc -e -aes-256-cbc -a -K c3 : ab : 8f : f1 : 37 : 20 : e8 : ad : 90 : 47 : dd : 39 : 46 : 6b : 3c : 89 : 74 : e5 : 92 : c2 : fa : 38 : 3d : 4a : 39 : 60 : 71 : 4c : ae : f0 : c4 : f2 -iv 00 : 00 : 00 : 00 : 00 : 00 : 00 : 00 : 00 : 00 00 : 00 : 00 : 00 : 00하지만 16 진수 문자열이 너무 길다는 오류가 발생합니다. 내가 그것을 단축하면 그것은 유효하지 않은 16 진수 4 값이됩니다. 나는 정말로 더 명확한 점을 높이 평가할 것이다. 당신의 도움을 주셔서 감사합니다. –매개 변수에 대한 OpenSSL 명령 줄 문서를 읽으려고 했습니까? –
16 진수 중간에 이상한 유니 코드 문자를 밀수입했습니다. 그들은 심지어 사이트에 복사되었다 :) 커서가 계속 그들에게 매달려 있었기 때문에 발견되었다. 이것은 아마도'digest'에 의해 반환 된 문자열 때문일 것입니다. 왜냐하면 당신이 내용을 필요로한다면 수동으로 16 진수로 출력하는 것이 더 좋습니다. –