2009-05-21 25 views
5

Tôi đang cố gắng tạo một CD-KEY duy nhất để đặt trong hộp sản phẩm của chúng tôi, giống như một CD-KEY thông thường được tìm thấy trong các hộp phần mềm tiêu chuẩn mà người dùng sử dụng để đăng ký sản phẩm.Thuật toán để tạo CD-KEY duy nhất có xác nhận

Tuy nhiên chúng tôi không bán phần mềm, chúng tôi đang bán bộ sưu tập DNA cho mục đích hình sự và y tế. Người dùng sẽ nhận được một bộ sưu tập nước bọt bằng thư với CD-KEY trên đó và họ sẽ sử dụng CD-KEY đó để tạo một tài khoản trên trang web của chúng tôi và nhận kết quả của họ. Các kết quả từ bài kiểm tra sẽ được liên kết với CD-KEY. Đây là cách duy nhất mà chúng tôi sẽ phải liên kết các kết quả cho bệnh nhân. Do đó điều quan trọng là nó không thất bại :)

Một trong những yêu cầu sẽ là danh sách các CD-KEY phải đủ "dàn trải" để không có khả năng ai đó nhập sai CD-KEY và vẫn có nó được chấp thuận cho một người khác kit, do đó trộn lên hai bộ dụng cụ. Điều đó có thể khiến chúng tôi phải chịu trách nhiệm hàng ngàn đô la.

Ví dụ, nó không thể là một chuỗi gia tăng của số như
...
Lý do là nếu ai đó nhận được bộ 00.002, nhưng đăng ký nó như 000.003 bởi tai nạn, sau đó kết quả của anh ta sẽ được kết hợp với người khác. Vì vậy, nó phải giống như số thẻ tín dụng ... Trừ khi một chuỗi hợp lệ được nhập, cơ hội của bạn ngẫu nhiên nhấn một số hợp lệ là 1 trong một triệu ...

Ngoài ra, chúng tôi đang bán hơn 50.000 bộ dụng cụ hàng năm cho các nhà cung cấp khác nhau (người sẽ tạo ra các CD-KEYS của riêng họ sử dụng thuật toán của chúng tôi) để chúng tôi không thể duy trì danh sách tất cả các CD-KEYS đã phát hành trước đó để kiểm tra trùng lặp. Thuật toán phải tạo ra các CD-KEY duy nhất.

Chúng tôi cũng yêu cầu khả năng xác minh rằng CD-KEY hợp lệ bằng thuật toán kiểm tra nhanh, để chúng tôi có thể thông báo cho người dùng nếu mã mà anh nhập không hợp lệ. Điều này bỏ ra nhiều thuật toán băm hoặc MD5 tôi tin. Và nó không thể là 128 bit bởi vì, ai sẽ dành thời gian đó để loại nó ra trên màn hình máy tính?

Cho đến nay đây là những gì tôi đã suy nghĩ cấu trúc CD-KEY cuối cùng sẽ trông giống như

(mã sản phẩm 4 char) - (4 char đang bán lại) - (12 char độc đáo, có thể kiểm chứng đĩa CD-KEY)

Ví dụ: 384A - gTLD - {4565 - FR54 - EDF3}


Để đảm bảo sự độc đáo trong những chìa khóa, tôi có thể bao gồm ngày hiện tại (20.090.521) như một phần của nguồn. Chúng tôi sẽ không tạo ra khóa duy nhất nhiều hơn một lần một tuần, do đó, giá trị này thay đổi thường xuyên đủ cho mục đích của giá trị ban đầu duy nhất.

Tôi có thể sử dụng thuật toán nào để tạo khóa duy nhất?

+2

Mật mã không an toàn, nếu an toàn chỉ nằm trong thuật toán, được giữ bí mật. :) –

+0

khóa cd cuối cùng sẽ được mã hóa bằng thuật toán loại băm có khóa bí mật. –

Trả lời

6

Tạo chuỗi <providername>000001, <providername>000002, vv hoặc bất cứ điều gì và mã hóa chúng với một khóa công khai, và đó là của bạn "CD-KEY" mà người dùng nhập. Giải mã CD-KEY bằng khóa riêng và xác thực rằng khi giải mã, bạn nhận được một chuỗi hợp lệ với tên nhà cung cấp hợp lệ.

+0

Cảm ơn đây chính xác là những gì tôi đang tìm kiếm. –

+0

Bạn không có nghĩa là mã hóa bằng khóa riêng, giải mã bằng khóa công khai? – Cam

+0

Không, anh ta đang sử dụng các thuật ngữ chính xác. Vì mục đích của mình, anh ta có thể sử dụng khóa riêng hoặc khóa công khai để thực hiện mã hóa miễn là anh ta sử dụng khóa khác để thực hiện mã hóa. Khi sử dụng khóa công khai/riêng tư, nếu một trong các hành động (mã hóa/giải mã) được thực hiện bởi một nhóm người, khóa chung sẽ được sử dụng cho điều đó. Đây là nơi các tên bắt nguồn từ. Trong trường hợp này, nó không thực sự mater được sử dụng. – Walter

1

Số thẻ tín dụng sử dụng số Luhn algorithm bạn có thể muốn xem xét điều gì đó tương tự như vậy.

+0

Tham chiếu thuật toán Verhoeff có vẻ tốt hơn nhiều ở chỗ nó sẽ bắt gặp lỗi transpozition. – JonnyBoats

1

Tôi sử dụng SeriousBit Ellipter link để bảo vệ phần mềm nhưng tôi không thấy lý do nào bạn có thể tạo nhóm khóa duy nhất mỗi tuần và thư viện để xác minh tính hợp lệ của khóa khi nhập vào trang web của bạn. Bạn cũng có thể mã hóa các dịch vụ tùy chọn vào khóa cho phép bạn kiểm soát cách xử lý mẫu từ khóa (đó là nếu bạn có các cấp dịch vụ khác nhau).

Vì nó sử dụng phương pháp mã hóa tạo khóa ở vị trí đầu tiên và nó tương đối rẻ, nó chắc chắn đáng để tôi xem.

+0

Cảm ơn bạn đã đề xuất. Tôi đã thử đường mòn và tôi hơi thất vọng một chút. Nếu tôi thay đổi số sê-ri vào cuối 00001, 00002, vv thì khóa cd mà nó trả về chỉ có 1 giá trị trong đó được thay đổi. –

-1

Tạo GUID và tạo một số ngẫu nhiên cho nó. GUID được đảm bảo là duy nhất và số ngẫu nhiên sẽ làm cho nó không thể xảy ra để nhấn một mã vô tình. Chỉ cần không sửa đổi GUID trong bất kỳ cách nào hoặc bạn có thể thỏa hiệp sự độc đáo.

http://msdn.microsoft.com/en-us/library/aa475087.aspx

+0

-1 GUID không an toàn về mặt mã hóa. Nhiều triển khai có các phần xác định cho nó, chẳng hạn như sự bao gồm địa chỉ MAC của máy tính. Ngoài ra sẽ yêu cầu kết nối internet để thực sự hoạt động. – Aron

1

cuối cùng tôi giải quyết cho một cd-key của mẫu đơn này

<TIMESTAMP>-<incremented number>-<8 char MD5 hash>-<checksumdigit> 

tôi đã sử dụng các thuật toán chữ số 11 ISBN checksum mod.

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