2010-06-16 27 views
15

Tôi có một chuỗi gồm 10-15 ký tự và tôi muốn mã hóa chuỗi đó. Vấn đề là tôi muốn nhận được một chuỗi được mã hóa ngắn nhất có thể. Tôi cũng sẽ muốn giải mã chuỗi đó trở lại chuỗi ban đầu của nó.Thuật toán mã hóa nào tốt nhất cho các chuỗi nhỏ?

Thuật toán mã hóa nào phù hợp nhất với tình huống này?

+2

Có yêu cầu mã hóa là "cứng" (trong trường hợp này tôi chỉ có nghĩa là không tầm thường) để bẻ khóa hay chỉ nhằm mục đích rút ngắn chuỗi? –

+0

rút ngắn chuỗi và "khó crack" hơn chỉ là phần thưởng –

Trả lời

7

AES sử dụng kích thước khối 16 byte; nó là admirably phù hợp với nhu cầu của bạn nếu giới hạn của bạn 10-15 ký tự là công ty. Sơ đồ đệm PKCS # 11 (IIRC) sẽ thêm 6-1 byte vào dữ liệu và tạo ra kết quả chính xác là 16 byte. Bạn không thực sự cần sử dụng một chế độ mã hóa (như CBC) vì bạn chỉ mã hóa một khối. Có một vấn đề về cách bạn muốn xử lý các khóa - luôn có vấn đề về cách bạn xử lý các khóa mã hóa.

Nếu bạn phải đi với độ dài dữ liệu ngắn hơn cho các chuỗi ngắn hơn, thì có thể bạn cần xem xét AES ở chế độ CTR. Điều này sử dụng khóa và bộ đếm để tạo luồng byte XOR'd với các byte của chuỗi. Nó sẽ để lại chuỗi được mã hóa của bạn ở cùng độ dài với chuỗi ký tự đầu vào.

Bạn sẽ khó có thể tìm được thuật toán nén nhằm mục đích giảm độ dài của chuỗi ngắn như vậy, do đó việc nén trước khi mã hóa chỉ là một lựa chọn.

5

Nếu chỉ là một chuỗi ngắn, bạn có thể sử dụng miếng đệm một lần là bí mật toán học hoàn hảo.

http://en.wikipedia.org/wiki/One-time_pad

Chỉ cần chắc chắn bạn không sử dụng khóa nhiều lần.

1

Nếu mục tiêu chính là rút ngắn, tôi sẽ tìm thư viện nén cho phép từ điển cố định được xây dựng trên một tập hợp các chuỗi phổ biến.
Cá nhân tôi không có kinh nghiệm với điều đó, nhưng tôi đặt cược LZMA có thể làm điều đó.

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