Chúng tôi thường muốn đầu ra mã hóa trông ngẫu nhiên, vì vậy tôi nghi ngờ rằng có bất kỳ chức năng mã hóa nào như bạn muốn tồn tại.
Nhưng tôi nghĩ bạn có thể đạt được mục tiêu của mình bằng quy trình gồm hai giai đoạn.
- Mã hóa dữ liệu của bạn bằng AES, sử dụng chế độ thích hợp như CBC hoặc GCM. Giai đoạn này có trách nhiệm bảo mật.
- Chuyển đổi từng khối bản mã AES sang dạng bạn cần. Tại đây, bạn có thể sử dụng bất kỳ thuật toán nào chuyển đổi số nguyên 128 bit thành định dạng véc-tơ phù hợp với mục tiêu của mình. Có thể sẽ thuận tiện nếu điều này có thể xử lý các khối 128 bit, nhưng nếu khối đó quá lớn, bạn có thể chia khối thành (giả sử) bốn khối 32 bit và xử lý riêng từng khối nhỏ hơn. Sau đó, người nhận sẽ chuyển đổi từng vectơ trở lại thành các khối 32 bit và nối bốn khối 32 bit liên tiếp để tạo lại khối bản mã AES 128 bit ban đầu và đưa khối đó vào thuật toán giải mã AES thích hợp. Giai đoạn này chỉ chuyển đổi dữ liệu sang định dạng mong muốn và không nhằm mục đích thêm bất kỳ bảo mật nào.
Như một ví dụ về thuật toán giai đoạn 2, giả sử chúng ta muốn đầu ra của mình là giá trị y trong đa thức y = x2 + 3. Vì vậy, chúng tôi lấy khối bản mã AES 128-bit của mình c dưới dạng số nguyên, hãy tính o = c2 + 3, sau đó sử dụng o như đầu ra cuối cùng của chúng tôi. (Tôi nghi ngờ ví dụ này không hoàn toàn là những gì bạn đang hướng tới, nhưng hy vọng sẽ chỉ cho bạn một hướng thích hợp).
Lưu ý: Đảm bảo rằng thuật toán chuyển đổi của bạn là không thể đảo ngược (vì vậy bất kỳ chuyển đổi đến o có thể được chuyển đổi duy nhất trở lại bản gốc c) hoặc quá trình giải mã sẽ không hoạt động bình thường.