2013-06-14 34 views
13

Tôi sẽ cố gắng làm cho gọn gàng này càng tốt.Vấn đề giải mã chuỗi OpenSSL

Tôi muốn có thể mã hóa & giải mã các chuỗi đơn giản bằng OpenSSL mà tôi đã thực hiện trước đây.

TUY NHIÊN, các điều kiện sau đây phải được đáp ứng:

  • Simple cụm từ mật khẩu sử dụng (không có phím)
  • Không tập tin đầu vào/đầu ra
  • Không nhắc cho mật khẩu (ghi rõ thông qua tùy chọn dòng lệnh cho một trong hai hướng)

Tôi 50% ở đó. Tôi có thể thực hiện thành công ENCRYPTION qua:

echo 'someTextIWantToEncrypt' | openssl enc -e -aes-256-cbc -nosalt -pass pass:mySecretPass 

Kết quả đầu ra là:

(??b}n??v???>??G??.?B??~? 

OK, tuyệt vời. Bây giờ tôi muốn DECRYPT chuỗi đó. Vì vậy, tôi làm:

echo -n '(??b}n??v???>??G??.?B??~?' | openssl enc -d -aes-256-cbc -pass pass:mySecretPass 

hoặc thậm chí là một sự thay thế:

openssl enc -d -aes-256-cbc -pass pass:mySecretPass <<< '(??b}n??v???>??G??.?B??~?' 

Nhưng tôi nhận được câu trả lời này:

bad magic number 

Mặc dù tôi không muốn sử dụng tập tin đầu vào/đầu ra, phương pháp đó KHÔNG hoạt động 100%:

# encrypt to file 
echo -n 'someTextIWantToEncrypt' | openssl enc -e -nosalt -out test.txt -aes-256-cbc -pass pass:mySecretPass 

# decrypt from file 
openssl enc -d -nosalt -in test.txt -aes-256-cbc -pass pass:mySecretPass 

# result of decryption (is successful): 
someTextIWantToEncrypt 

Vì vậy, ... làm thế nào tôi có thể đạt được quá trình giải mã trên mà không cần bằng cách sử dụng các tệp đầu vào/đầu ra nào? Tôi cảm thấy tôi gần gũi, nhưng thiếu một số chi tiết nhỏ.

Xin cảm ơn trước.

Trả lời

24

Sự cố là mã hóa sử dụng toàn bộ bộ ký tự ASCII, bao gồm các ký tự không thể in được. Nếu bạn muốn có thể cắt và dán dữ liệu được mã hóa, bạn cần phải chuyển đổi nó thành chỉ các ký tự có thể in được. Bạn có thể làm điều này với -base64 (hoặc -a) tùy chọn:

echo 'someTextIWantToEncrypt' | \ 
    openssl enc -base64 -e -aes-256-cbc -nosalt -pass pass:mySecretPass 

KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU= 

Sau đó giải mã nó theo cùng một cách:

echo "KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU=" | \ 
    openssl enc -base64 -d -aes-256-cbc -nosalt -pass pass:mySecretPass 

CẢNH BÁO: Nếu bạn đang sử dụng openssl, tôi chỉ có thể giả định bảo mật dữ liệu và do đó mật khẩu là quan trọng đối với bạn. Nếu trường hợp đó xảy ra, bạn nên không bao giờ cung cấp mật khẩu trên dòng lệnh, vì nó có thể được hiển thị cho bất kỳ ai có đặc quyền chạy ps.

Một giải pháp tốt hơn là để lưu trữ mật khẩu trong một biến môi trường và có openssl đọc nó từ đó:

export passwd="mySecretPass" 
echo "KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU=" | \ 
    openssl enc -base64 -d -aes-256-cbc -nosalt -pass env:passwd 
+0

Bạn là chính xác, và tôi đã tìm ra này - bạn là chính xác cũng như các cá nhân đã giúp tôi. Đạo cụ đi đến cả hai bạn.Vì tôi mới đến trang này nên tôi sẽ không trả lời câu hỏi của mình trong vài giờ nữa. Trong mọi trường hợp, THANK YOU! –

+2

Và như một sang một bên, bạn cũng chính xác về giải pháp "tốt hơn". Tất cả những gì tôi có thể nói là đây là một Proof-Of-Concept đang hoạt động, và để bổ sung cho nhận xét của bạn, IS mục tiêu cuối cùng sẽ thực hiện "lưu trữ" an toàn hơn các thông tin đó và không đưa nó vào dòng lệnh. Kudos cho bạn Adam Liss. –

+0

Trong trường hợp đó, tôi xin trân trọng đề nghị bạn cố gắng xem xét lại bởi một chuyên gia bảo mật. Bạn thấy rất nhiều điều đáng tin cậy - nhưng hoàn toàn dễ bị tổn thương - triển khai trong hơn 15 năm trong kinh doanh. –

Các vấn đề liên quan