Je cherche un moyen de crypter/obfusquer un ID entier dans un autre entier. Plus précisément, j'ai besoin d'une fonction int F(int x)
de sorte que
- x<->F(x) est une correspondance biunivoque (si x != y, F(x) != F(y))
- Étant donné F(x), il est facile de trouver x - donc F n'est pas une fonction de hachage.
- étant donné x et F(x) il est difficile/impossible de trouver F(y), quelque chose comme
x ^ 0x1234
ne fonctionne pas
Pour que les choses soient claires, je ne cherche pas une solution de cryptage fort, mais seulement de l'obscurcissement. Imaginez une application web avec des urls comme example.com/profile/1
, example.com/profile/2
etc. Les profils eux-mêmes ne sont pas secrets, mais je voudrais empêcher les voyeurs occasionnels de voir/récupérer tous les profils l'un après l'autre, donc je préférerais les cacher derrière quelque chose du genre example.com/profile/23423
, example.com/profile/80980234
etc. Bien que les jetons stockés dans la base de données puissent faire le travail assez facilement, je suis curieux de savoir s'il existe des mathématiques simples pour cela.
Une exigence importante que je n'avais pas clairement définie est que les résultats doivent avoir l'air "aléatoires", c'est-à-dire qu'étant donné une séquence x,x+1,...,x+n
, F(x),F(x+1)...F(x+n)
ne devraient pas former une progression de quelque sorte que ce soit.
0 votes
Est-ce que int F(int x) est une exigence, ou est-ce que cela pourrait être int[2]F(int x) ?
0 votes
@Eugen Rieck, idéalement, j'aimerais que x et F(x) soient dans l'intervalle des nombres
0 votes
@toon81, oui la fonction sera gardée secrète
0 votes
Puisque vous avez dit que vous vouliez vous passer de jeton, cela signifie-t-il que vous voulez éviter tout type de table de consultation ?
0 votes
@Daniel Mošmondor, oui, exactement.
17 votes
Mec, cette question est parfaitement formulée et correspond exactement à ce que je cherche. Bon travail.