Comment crypter/décrypter un entier en PHP
est-il possible de faire 2 chemin de chiffrement/déchiffrement pour un entier (ou une chaîne)
Veuillez noter que je ne suis pas à la recherche pour le codage de la
j'ai besoin de quelque chose comme ce
de cryptage (100) --> 24694
de cryptage (101) --> 9564jh4 ou 45216 ou gvhjdfT ou quoi que ...
décryptage (24694) --> 100
Je n'ai pas besoin de codage parce que c'est bijective
base64_encode(100) -->MTAw
base64_encode(101) -->MTAx
J'espère que je vais trouver un moyen de ici pour crypter/décrypter des NOMBRES PURS (ordinateur adore les chiffres, c'est plus rapide)
- Les deux réponses à l'heure actuelle ne sont pas cryptographiquement sûr. Pourriez-vous préciser le possible le format de sortie et le niveau de sécurité dont vous avez besoin?
- Normalement, le chiffrement est bijective. Vous pouvez la rendre plus aléatoire à l'aide d'un unique IV dans la plupart des modes de chiffrement.
- J'ai juste besoin d'un moyen simple de crypter/décrypter dans deux façons, mais pas avec la bijection comme "encodage" ne crypte(1) -> 15 déchiffrer(15) -> 1 codage est bijective, et n'empêche pas l'utilisateur de deviner la prochaine id/code/ou..que ce soit 1-> 2> b 10-> j
- est-il un simple md5() ou hash() comme fonction qui pourrait être inversée
- Des empreintes cryptographiques sont créés spécifiquement pour être à sens unique. Vous pouvez bien sûr garder une table, mais dans ce cas, vous pourriez aussi bien utiliser un assez grand nombre au hasard.
- suffit d'utiliser AES, DES, ou une autre méthode de chiffrement au lieu d'essayer personnalisée de systèmes de cryptage. Et votre définition de bijective est éteint. Un bijective méthode ne signifie pas qu'il est prévisible. Cela signifie qu'à chaque entrée a une sortie unique. (ce qui est une exigence pour le décryptage)
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé de regarder dans ROT-13?
Réponse plus sérieuse: à partir de cette DONC réponse, vous pouvez utiliser:
numhash(numhash(1111111111)); // 2521176519
64bit de soutien. nombre négatif de soutien. et un peu de sécurité sel.
@Petr Cibulka
Voici, étape par étape(supprimer les commentaires):
Vous pouvez simplement utiliser 3DES-CBC mode de cryptage pour effectuer l'opération. Si vous voulez pour n'accepter que les valeurs que vous avez créé, vous pouvez ajouter un HMAC pour le texte chiffré. Si le HMAC est pas assez, vous pouvez compter sur le format des nombres pour ce régime particulier. Si vous souhaitez que les utilisateurs de ne pas être en mesure de copier les valeurs de l'autre, vous pouvez utiliser un hasard IV.
Donc, fondamentalement, vous enregistrez le numéro 8 ou 8 octets chaîne de caractères ASCII par la gauche-rembourrage avec des valeurs nulles. Puis vous effectuez un cryptage d'un seul bloc. Cela vous permet d'avoir 2^64 ou 10^8 chiffres. Vous pouvez en base 64 chiffrer le résultat, en remplacement de la
+
et/
caractères avec l'URL-safe-
et_
caractères.Noter que ce chiffrement/déchiffrement est bien sûr bijective (ou une permutation, comme il est généralement appelé en crypto). C'est OK, bien, que la sortie est assez grande pour un attaquant d'avoir de la difficulté à deviner une valeur.
Cela peut être plus que ce que vous cherchez, mais j'ai pensé qu'il serait amusant de construire une réponse. Voici une présentation simple de la préservation de chiffrement qui prend une 16-bits (c'est à dire de 0 à 65535) et le chiffre à l'autre 16-bit nombre et de retour à nouveau, basé sur la 128 bits de la clé symétrique. Vous pouvez construire quelque chose comme ça.
Il est déterministe, en ce que toute entrée crypte toujours à la même sortie avec la même clé, mais pour tout nombre n, il n'y a aucun moyen de prévoir le résultat pour n + 1.
Quelques exemples:
tout simplement une fonction qui mangles entiers en gardant le plus petit nombre de petits (si vous avez besoin de conserver grandeur):