2011-01-13 42 views
5

Tôi có một (thực sự là một băm SHA1) lớn và số nguyên "độc đáo".Tạo một cụm từ giả tự nhiên từ một số nguyên lớn một cách đảo ngược

Lưu ý: Trong khi tôi đang nói ở đây về băm SHA1, đây là không một câu hỏi mật mã/bảo mật! Tôi là không phải đang cố gắng phá vỡ SHA1. Hãy tưởng tượng một số nguyên ngẫu nhiên 160 bit thay vì SHA1 nếu điều đó sẽ giúp ích.

Tôi muốn (không có lý do nào khác ngoài việc vui chơi) để tìm một thuật toán để lập bản đồ mà SHA1 băm để một (pseudo-) cụm từ tiếng Anh máy tính tạo ra. Việc lập bản đồ phải là hai chiều (tức là, khi biết thuật toán, người ta phải có khả năng tính toán băm SHA1 ban đầu từ cụm từ đó.)

Cụm từ này không có ý nghĩa. Tôi thậm chí sẽ giải quyết cho toàn bộ một đoạn vô nghĩa. (Mặc dù chất lượng - Anh quốc - trong một đoạn văn có lẽ nên được tốt hơn so với một cụm từ chỉ.)

Một thuật toán tốt hơn sẽ tạo ra ngắn hơn, nhiều hơn trông tự nhiên, cụm từ độc đáo hơn.

Một biến thể: nó là OK nếu tôi sẽ có thể chỉ làm việc với một phần của băm. Nói, sáu chữ số hex đầu tiên là tốt.

Việc sử dụng có thể có của các cụm từ được tạo ra: phiên bản có thể đọc được con người của Git cam ID, để sử dụng như một phương châm cho một phiên bản chương trình nhất định, được xây dựng từ đó cam kết. (Như tôi đã nói, đây là "cho vui". Tôi không tuyên bố rằng điều này là rất thiết thực - hoặc dễ đọc hơn bản thân SHA1.)

Cách tiếp cận có thể có: Trong quá khứ tôi đã cố gắng xây dựng một bảng xác suất (của từ), và tạo ra các cụm từ như chuỗi Markov, gieo hạt máy phát điện (lấy cành từ cây xác suất), theo các bit tôi đọc từ SHA. Điều này không thành công lắm, các cụm từ kết quả quá dài và xấu xí. Tôi không chắc liệu đây có phải là lỗi hay không, hay lỗ hổng chung trong thuật toán, vì tôi phải từ bỏ nó đủ sớm.

Bây giờ tôi đang suy nghĩ về cố gắng để giải quyết vấn đề một lần nữa. Bất kỳ lời khuyên nào về cách tiếp cận điều này? Bạn có nghĩ phương pháp tiếp cận chuỗi Markov có thể hoạt động ở đây không? Thứ gì khác?

+0

Tôi thực sự không biết gì về mật mã. Vì vậy, tôi chỉ muốn chắc chắn rằng tôi hiểu được câu hỏi. Bạn về cơ bản muốn mã hóa một số nguyên lớn thành một câu duy nhất, để nó có vẻ tự nhiên nhất có thể? – yurib

+0

@yurib: vâng, về cơ bản là nó. –

+0

@yurib: ngoại trừ việc tôi cũng muốn có thể chuyển đổi câu này trở lại số nguyên đó sau đó. –

Trả lời

3

Cách tiếp cận rất đơn giản là: Lấy danh sách 1024 từ, 1024 động từ và 1024 tính từ mỗi. cụm từ của bạn sau đó có thể là câu có dạng

noun[bits_01-10] verb[bits11-20] adjective[bits21-30] verb[bits31-40], 
noun[bits_41-50] verb[bits51-60] adjective[bits61-70] verb[bits71-80], 
noun[bits_81-90] verb[bits91-100] adjective[bits101-110] verb[bits111-120] and 
noun[bits_121-130] verb[bits131-140] adjective[bits141-150] verb[bits151-160]. 

Với một chút suy nghĩ về ngôn ngữ hơn có lẽ bạn có thể xây dựng quảng cáo hơi phức tạp hơn do đó không nên lặp đi lặp lại tìm kiếm câu (nói, một chút cho số ít/số nhiều, một chút của hai cho các tenses khác nhau, ...). Danh sách từ dài hơn sử dụng thêm một vài bit nhưng tôi đoán là bạn đạt được những từ khá kỳ lạ khá nhanh.

+0

Thông minh! Vâng, một bài học nữa trong KISS cho tôi. :-) –

+0

Ngoài ra: Tôi nghĩ rằng "những từ khá kỳ lạ" có thể là một nửa của niềm vui. (Hãy suy nghĩ "Maverick Meerkat" chẳng hạn.) –

+0

Có ai đó biết nơi để có được từ vựng tốt, chia nhỏ bằng động từ danh từ và tính từ? –

0

Hàm băm nghĩa là không thể (trong giới hạn hợp lý) để lấy dữ liệu từ mã băm, trừ khi nó bị hỏng (không an toàn).

Câu hỏi nên được về vi phạm SHA-1 thuật toán băm - nhìn vào Google, nó không phải là bị hỏng. Vì vậy, không, bạn không thể tạo cụm từ tiếng Anh từ mã băm SHA-1, nếu bạn có thể, hãy tạo một bài báo lớn về điều đó, rất nhiều trong số đó là vô dụng, điều này sẽ là bước đột phá :-)

Edit: một phần của hash là đủ, tôi đề nghị chỉ là sức mạnh vũ phu (+ bản đồ đơn giản của băm < -> cụm từ, có thể trong một tập tin hoặc db), phá vỡ thuật toán băm là rất "súp mạnh" (khó khăn vấn đề).

Edit2: kẻ được cụ thể hơn khi đặt câu hỏi, không phải là lỗi của tôi ... Tôi sẽ không xóa này để nó sợ hãi tắt bất kỳ kẻ crypto khác xung quanh :-)

+0

Xin lỗi, tôi không hỏi về việc trích xuất thông tin từ SHA-1. Tôi hỏi về * tạo ra * thông tin, sử dụng SHA-1 (một số nguyên lớn) làm hạt giống. Đây không phải là câu hỏi bảo mật. –

1

Chúng tôi sẽ, cho phép xem ... Ngôn ngữ tiếng Anh has about 1,000,000 words. Đó là khoảng 20 bit cho mỗi từ. SHA1 là 160 bit, vì vậy bạn sẽ cần 8 từ.Về mặt lý thuyết, tất cả những gì bạn cần làm là lấy từ thứ n của từ điển oxford english, trong đó n là một nhóm 20 bit tại một thời điểm.

Bây giờ, để làm cho nó tự nhiên hơn, bạn có thể thử thêm "in/at/on/and/the ..." giữa các từ, theo loại của chúng (danh từ, động từ ...) bằng cách sử dụng một số thuật toán đơn giản . (Bạn nên loại bỏ tất cả những từ này khỏi từ điển cơ sở của bạn, tất nhiên).

Thuật toán có thể đảo ngược: Chỉ cần xóa tất cả các từ bạn đã thêm và chuyển đổi từng từ thành chỉ mục 20 bit của nó.

Ngoài ra, hãy thử google "máy phát điện xúc phạm". Một số máy phát điện khá đẹp. Tuy nhiên, tôi không chắc chắn về số lượng kết hợp.

You can buy Từ điển tiếng Anh Oxford trên CD-ROM với hơn 500.000 từ (19-bit). Tôi không chắc chắn nếu nó sẽ được dễ dàng để trích xuất các từ và các loại của họ, tuy nhiên. Tôi không chắc đó có phải là hợp pháp hay không, nhưng tôi nghĩ bạn không thể yêu cầu bằng sáng chế về các mục từ điển ...

+0

-1: điều này có nghĩa là gì? nó là thuật toán HASH, nó phụ thuộc vào tất cả dữ liệu, và bạn không thể dự đoán va chạm, điều này là siêu ngây thơ hay cái gì ?! EDIT: -1 gỡ bỏ, câu hỏi là mơ hồ, chuyển đổi của băm thành từ có thể được hiểu un-cryptograhic cách – peenut

+0

@peenut: xin vui lòng đọc bình luận của tôi để trả lời của bạn. Tôi không ** cố gắng phá vỡ SHA. –

+0

@peenut: Chỉ 160 bit. Tôi chỉ đề xuất một bản đồ 1 đến 1 giữa bất kỳ luồng 160 bit nào và có thể đọc được bằng tiếng Anh. –

1

Đây là câu hỏi cũ nhưng entropoetry là thư viện JavaScript (Node/frontend) cũng giải quyết được vấn đề này. Nó kết hợp thơ Markov với mã Huffman, do đó, cho cùng một từ điển (tức là, cùng một phiên bản của thư viện), việc chuyển đổi thơ ca sẽ là hai chiều.

Ví dụ, từ dòng lệnh Node:

> var Poet = require('entropoetry'); var p = new Poet(); 
> p.stringify(Buffer.from('deadbeef', 'hex')) 
'old trick of loving you\nif you but' 
> console.log(p.parse(`old trick of loving you 
... if you but`)) 
<Buffer de ad be ef> 

Và như technology marches on, những gì dường như là một ý tưởng “vui vẻ chỉ” trong năm 2011 có một số sử dụng thực vào năm 2017: Phím tin ghi nhớ cryptocurrency (ví não), Các liên kết Dat/IPFS, v.v.

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