Điểm:3

Mã hóa/Mã hóa và Giải mã/Giải mã một chuỗi có bí mật

lá cờ cn

Khi phát triển một ứng dụng, tôi có một trường hợp sử dụng đơn giản khi tôi muốn mã hóa/mã hóa một chuỗi (nó cũng có thể là một vài byte vì về cơ bản nó chỉ là một Địa chỉ IP). Ở đầu ra, tôi nghĩ tốt nhất nên có một chuỗi hex (nghĩ về các hàm băm md5 cũ). Không ai không có khóa riêng không thể giải mã/giải mã Địa chỉ IP.

Quy trình như sau: Tôi có một chuỗi (Địa chỉ IP từ Mạng VPN) và mã hóa nó bằng khóa riêng (chỉ nên có một khóa riêng, không có khóa chung hoặc bất kỳ thứ gì). Người dùng nhận được chuỗi mã hóa, đăng nhập vào ứng dụng của tôi và gửi lại cho tôi để tôi có thể liên kết người dùng với Địa chỉ IP. Địa chỉ IP sẽ được giữ riêng tư và chỉ trong tay tôi.

Có ai trong số các bạn quen thuộc với mật mã biết cách thực hiện loại mã hóa/mã hóa này hoặc phương pháp nào hoạt động tốt ở đây không? Tôi sẵn sàng dành một số nỗ lực để đọc về cách thực hiện nhiệm vụ này, nhưng tôi sẽ đánh giá cao nếu ai đó có thể hướng dẫn tôi một chút với kiến ​​​​thức của họ về hướng tôi phải đi trong lĩnh vực khó hiểu này.

Trân trọng

Maarten Bodewes avatar
lá cờ in
Có vẻ như bạn chỉ muốn sử dụng mật mã đối xứng, có thể sử dụng chế độ được xác thực như AES-GCM. Nhân tiện, có vẻ như bạn muốn khóa của mình xuất hiện trong quá trình mã hóa và giải mã: mà chúng tôi thường gọi là khóa **bí mật** chứ không phải khóa **riêng** vì bạn chỉ mong đợi có khóa riêng tại một vị trí .
Maarten Bodewes avatar
lá cờ in
Lưu ý rằng đầu ra của mật mã hiện đại bao gồm nhị phân, thường là byte. Các byte đó có thể được biểu diễn hoặc mã hóa dưới dạng văn bản bằng cách sử dụng - ví dụ - hệ thập lục phân hoặc base64url. Tuy nhiên, mã hóa/giải mã không được coi là một phần của thuật toán mật mã (mặc dù tất nhiên nó có thể là một phần của giao thức liên quan đến mật mã). Chẳng hạn, đầu ra của thuật toán MD5 đã lỗi thời là 128 bit/16 byte, nhưng đầu ra của công cụ dòng lệnh `md5sum` bao gồm các số thập lục phân và chỉ báo tệp.
poncho avatar
lá cờ my
Người dùng có tự nhập chuỗi không? Nếu vậy, điều quan trọng là giữ cho nó ngắn gọn. Mặt khác, nếu địa chỉ IP mà chúng ta đang nói đến là địa chỉ IPv6, thì đó đã là 128 bit và do đó, việc tạo chuỗi 'ngắn' có thể không thực hiện được với phương pháp này - một phương pháp thay thế có thể là phương pháp 'tinyURL' - yêu cầu máy chủ giữ cơ sở dữ liệu về 'thẻ' và 'địa chỉ IP', đồng thời đưa ra các thẻ cho người dùng.
fonzane avatar
lá cờ cn
Người dùng không tự nhập chuỗi. Tôi đang mã hóa nó bằng QR-Code. Giải pháp của tôi ngay bây giờ là sử dụng các mô-đun tiền điện tử sẵn có của nodejs createCipheriv với thuật toán aes256. Nghi ngờ duy nhất của tôi với cách tiếp cận này ngay bây giờ là chuỗi đầu ra quá dài, tôi có thể không muốn đặt nó vào một URL...
Maarten Bodewes avatar
lá cờ in
Thật không may, đưa ra một câu trả lời hay sẽ bao gồm một phân tích đầy đủ về tình huống của bạn. Tuy nhiên, tôi có thể nói rằng `createCipheriv` chỉ sử dụng CBC, điều này không hiệu quả do phần đệm. Ngoài ra, bạn nên xem cách mã hóa văn bản gốc theo số byte tối thiểu. Ví dụ. một địa chỉ IPv4 có thể chỉ chiếm 4 byte (và thậm chí ít hơn nếu nó luôn nằm trong mạng LAN 10.x.x.x, vì bạn có thể bỏ qua 10).

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.