Il semble que vous confondiez cryptage et encodage. Ce sont des préoccupations complètement distinctes. Étant donné que vous ne fournissez pas assez d'informations sur la sécurité requise pour parler de chiffrement approprié, je suppose que vous parlez d'encodage. Pour l'encodage, cela n'a pas d'importance si l'entrée est cryptée ou non. La seule différence est qu'une entrée cryptée ne peut presque certainement pas être compressée, donc toute compression doit être effectuée avant le cryptage. Pour le codage, l'approche la plus simple consiste à considérer l'entrée comme un grand nombre (vous), à choisir un ensemble de symboles et à coder le nombre comme base-N où N est la taille de l'ensemble choisi. Parce que le code résultant est destiné à l'entrée humaine, vous voudrez éviter d'avoir plusieurs caractères avec des formes similaires (1, I, E/S, O, 0, D/5, S), le choix dépend de la police utilisée .
Il est également très utile d'avoir une fonction de détection d'erreur intégrée. Un moyen simple de créer une détection d'erreur correcte consiste à ajouter quelques bits d'une bonne fonction de hachage au numéro. Par exemple (en pseudocode):
number_to_encode = input_number << 5 | MD5(input_number) & 0x1F
encoded_string = Base32Encode(number_to_encode)
number_to_decode = Base32Decode(encoded_string)
output_number = number_to_decode >> 5
checksum = number_to_decode & 0x1F
if MD5(output_number) & 0x1F != checksum then
Error
Vous pouvez faire mieux que ça si vous avez un modèle d'erreur, mais en supposant modèle d'erreur aléatoire, il est aussi bon qu'il obtient, détecter plus de 96% de toutes les erreurs, en ajoutant seulement un caractère base32.
Bien que base64 soit "imprimable", il n'est pas vraiment "typable" manuellement, donc si l'exigence est qu'ils copient le code d'un document imprimé, base64 n'est pas le meilleur choix. –
Le niveau de sécurité n'est pas critique mais le nombre de chiffres est. Je n'essaie pas de protéger le pentagone ici, j'essaie d'empêcher mamie de voler des logiciels. Grand-mère ne peut pas copier et coller et je ne veux pas qu'elle essaye de taper une clé à 16 chiffres. –