2009-06-25 52 views
5

Tôi đang tạo một webgame nhỏ có nhiệm vụ và giải pháp, giải pháp được giải quyết bằng cách nhập mã cho người dùng sau khi hoàn thành một nhiệm vụ. Để có một số bảo mật (chống lại gian lận) tôi không muốn lưu trữ các mã được quảng bá bởi trò chơi bằng văn bản thuần túy. Nhưng kể từ khi tôi cần để có thể cung cấp cho một cầu thủ mã khi ông đã hoàn thành nhiệm vụ tôi không thể băm nó kể từ đó tôi không thể retrive nó.Mã hóa "mật khẩu" python an toàn nhất

Vì vậy, cách an toàn nhất để mã hóa/giải mã một cái gì đó bằng cách sử dụng python là gì?

+0

xem tại đây: http://stackoverflow.com/questions/172486/what-pure-python-library-to-use-for- aes-256-encryption –

+2

Bạn sẽ có thể ăn gian như thế nào nếu bạn lưu trữ các mã đó bằng văn bản thuần túy? – innaM

+0

Chỉ trong nguyên nhân của một người nào đó đang nắm giữ bảng cơ sở dữ liệu với mã số ... – espenhogbakk

Trả lời

5

Nếu tập lệnh của bạn có thể giải mã mật khẩu, vì vậy ai đó có thể xâm nhập vào máy chủ của bạn. Mã hóa chỉ thực sự hữu ích khi ai đó nhập mật khẩu để mở khóa - nếu mã đó vẫn mở khóa (hoặc tập lệnh có mật khẩu để mở khóa), mã hóa là vô nghĩa

Đây là lý do tại sao băm hữu ích hơn vì nó là quá trình một chiều - ngay cả khi ai đó biết băm mật khẩu của bạn, họ không biết văn bản thuần túy mà họ phải nhập để tạo ra nó (không có nhiều vũ lực)

Tôi sẽ không lo lắng về việc giữ mật khẩu trò chơi văn bản thô. Nếu bạn lo lắng về việc bảo vệ chúng, hãy sửa chữa các tệp SQL có thể, v.v., hãy đảm bảo rằng máy chủ web và phần mềm khác của bạn được cập nhật và được định cấu hình chính xác, v.v.

Có lẽ bạn nghĩ cách làm cho nó ít hấp dẫn hơn để ăn cắp mật khẩu hơn là chơi trò chơi? Ví dụ, có một trò chơi (tôi không nhớ nó là gì) mà nếu bạn sử dụng mức độ bỏ qua gian lận, bạn đã đi đến cấp độ tiếp theo nhưng nó đã không đánh dấu nó là "hoàn thành", hoặc bạn có thể bỏ qua các cấp nhưng không nhận được bất kỳ điểm nào.Hoặc nhìn vào Project Euler, bạn có thể làm bất kỳ cấp độ nào, nhưng bạn chỉ nhận được điểm nếu bạn nhập câu trả lời (và tìm ra câu trả lời là toàn bộ điểm của trò chơi, vì vậy gian lận đánh bại chơi trò chơi)

Nếu bạn đang thực sự hoang tưởng, bạn có thể crypto thể sử dụng bất đối xứng, nơi bạn có cơ bản mã hóa một cái gì đó với key A, và bạn chỉ có thể đọc nó với key B ..

tôi đã đưa ra một khái niệm tương tự cho việc sử dụng mã hóa GPG (phổ biến không đối xứng hệ thống mật mã, chủ yếu được sử dụng để mã hóa email hoặc ký tên) to secure website data. Tôi không chắc chắn cách thức này sẽ áp dụng để bảo mật mật khẩu cấp trò chơi và như tôi đã nói, bạn cần phải thực sự hoang tưởng để thậm chí xem xét việc này ..

Tóm lại, tôi muốn lưu trữ mật khẩu văn bản thuần túy và tập trung các mối quan tâm về bảo mật của bạn ở nơi khác (chính mã ứng dụng web)

+0

Tôi đồng ý với bạn cho hầu hết các phần, và đây là những gì tôi proporbly kết thúc với. Tôi cũng nghĩ rằng nếu tôi làm cho nó "không thể" để làm tiêm sql và các công cụ như vậy có vấn đề noe trong việc lưu trữ các mật khẩu cấp trong văn bản đơn giản, vì không ai có thể có được chúng ra, nhưng nếu họ nhận được chúng ra , họ có thể "chạy" máng trò chơi mà không có vấn đề và là người chiến thắng ... Vì vậy, tôi đã nghĩ rằng chỉ để được ở bên an toàn, một số mã hóa sẽ không bị tổn thương. – espenhogbakk

+0

Và các giải pháp mã hóa GPG có vẻ hơi hoang tưởng có :) – espenhogbakk

2

Nếu đó là trò chơi trên web, bạn có thể lưu trữ phía máy chủ mã và gửi chúng cho khách hàng khi hoàn thành tác vụ không? Kiến trúc của trò chơi của bạn là gì?

Đối với mã hóa, có thể thử một cái gì đó như pyDes?

5

Mã hóa bảo mật nhất không có mã hóa. Mật khẩu phải được giảm xuống băm. Đây là một phép chuyển đổi một chiều, làm cho mật khẩu (gần như) không thể khôi phục.

Khi cung cấp mã cho ai đó, bạn có thể thực hiện các bước sau là thực sự là an toàn.

(1) tạo một số chuỗi ngẫu nhiên.

(2) cung cấp cho họ chuỗi.

(3) lưu mã băm của chuỗi bạn đã tạo.

Một lần.

Nếu họ "quên" mã, bạn phải (1) đảm bảo rằng họ được ủy quyền để nhận mã, sau đó (2) thực hiện lại quy trình (tạo mã mới, cung cấp mã cho họ, lưu băm.)

+0

như câu hỏi đã nói, băm không tốt, vì anh ta có thể nói cho người chơi biết mật khẩu –

+2

@Adrian: Tốt. Tuy nhiên, tôi nghĩ câu hỏi là thiếu sót. Hoặc, đây không phải là bảo mật thực sự, trong trường hợp mã hóa trường hợp không thực sự giúp ích nhiều. –

+0

Có một bài đăng khác nhưng đã bị xóa mà tôi nghĩ là một ý tưởng hay: Tạo băm của một chuỗi trong tên người dùng + "_ mygame _" + level (cũng có thể thêm muối để bảo mật tốt hơn?) Tôi không biết ai đã đăng và xóa nó sau đó, nhưng tôi nghĩ đó là một cách tiếp cận tốt đẹp. –

0

Câu hỏi của bạn không rõ ràng. Bạn muốn giải mã xảy ra ở đâu? Bằng cách này hay cách khác, bản rõ phải xuất hiện vì bạn cần người chơi cuối cùng biết được nó.

Chọn một số cipher và được thực hiện với nó.

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