Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple integer encryption

Is there a simple algorithm to encrypt integers? That is, a function E(i,k) that accepts an n-bit integer and a key (of any type) and produces another, unrelated n-bit integer that, when fed into a second function D(E(i),k) (along with the key) produces the original integer?

Obviously there are some simple reversible operations you can perform, but they all seem to produce clearly related outputs (e.g. consecutive inputs lead to consecutive outputs). Also, of course, there are cryptographically strong standard algorithms, but they don't produce small enough outputs (e.g. 32-bit). I know any 32-bit cryptography can be brute-forced, but I'm not looking for something cryptographically strong, just something that looks random. Theoretically speaking it should be possible; after all, I could just create a dictionary by randomly pairing every integer. But I was hoping for something a little less memory-intensive.

Edit: Thanks for the answers. Simple XOR solutions will not work because similar inputs will produce similar outputs.

like image 592
tloflin Avatar asked May 04 '10 23:05

tloflin


2 Answers

Would not this amount to a Block Cipher of block size = 32 bits ?

Not very popular, because it's easy to break. But theorically feasible. Here is one implementation in Perl : http://metacpan.org/pod/Crypt::Skip32

UPDATE: See also Format preserving encryption

UPDATE 2: RC5 supports 32-64-128 bits for its block size

like image 177
leonbloy Avatar answered Sep 28 '22 10:09

leonbloy


I wrote an article some time ago about how to generate a 'cryptographically secure permutation' from a block cipher, which sounds like what you want. It covers using folding to reduce the size of a block cipher, and a trick for dealing with non-power-of-2 ranges.

like image 42
Nick Johnson Avatar answered Sep 28 '22 08:09

Nick Johnson