Comment faire pour crypter/décrypter une chaîne par une autre chaîne de caractères comme un mot de passe?
Je suis en train de faire un programme simple qui prend le texte entré dans une zone de texte, et prend un mot de passe qui est dans une autre zone de texte, puis fait une sorte de chiffrement simple sur elle et l'enregistre dans un fichier. Par la suite, l'utilisateur doit être en mesure d'ouvrir à nouveau le fichier et de fournir le mot de passe utilisé pour crypter et il doit cracher le texte original.
Droit maintenant, je prends de la chaîne. Séparer en char tableau, puis faire de même pour le mot de passe. Après cela, je prends le mot de passe, convertir tous ces caractères en nombres entiers, trouver la valeur moyenne pour tous les d'eux, et l'utiliser comme un décalage pour les chars, il int texte original. Genre:
textChars[1]= (char)((int)textChars[1]+offset);
Alors je peux faire l'inverse pour la chaîne cryptée:
encryptedChars[1]= (char)((int)encryptedChars[1]-offset);
Le problème est que les personnages ont des valeurs différentes sur différentes plates-formes, donc parfois le décalage va tourner le char dans certains nombre fou (comme une valeur négative) qui seront il suffit de tourner le char en un point d'interrogation.
J'ai regardé la crypto dans la bibliothèque standard de Java de l'API, mais je me sens confus quant à la façon dont la clé fonctionne si c'est juste généré de façon aléatoire à chaque fois que je démarre le programme.
Ce dont j'ai besoin est de deux fonctions qui ressemblent à des String encrypt(String text,String Password)
qui crache le texte chiffré avec le mot de passe comme une clé de décryptage, et String decrypt(String encryptedText, String Password)
qui serait cracher le texte original (ou le charabia, si le mot de passe est indésirable)
Toute aide est très apprécié, c'est vraiment juste un projet personnel, donc je n'ai pas besoin de fantaisie méthodes de cryptage.
double possible de Java 256 bits AES
OriginalL'auteur RangerMauve | 2011-10-14
Vous devez vous connecter pour publier un commentaire.
Ce que vous avez vraiment besoin est de chiffrement Symétrique, c'est à dire, l'algorithme utilise la même clé pour chiffrer et déchiffrer les données. Il existe de nombreux algorithmes disponibles qui soutiennent la cryptographie symétrique comme DES, AES.
Ont un coup d'oeil à cet exemple: http://www.java2s.com/Code/Java/Security/EncryptionanddecryptionwithAESECBPKCS7Padding.htm
Dans l'exemple ci-dessus, remplacez
avec
Il utilise le bouncycastle de la bibliothèque, qui est sans doute le meilleur bibliothèques de cryptographie disponibles.
Cela semble être la solution la plus prometteuse pour l'instant, je vais aller l'essayer.
Quoi de mal avec java2s? Personnellement, je trouve les exemples sur le site un bon début plutôt que de commencer à partir de zéro.
Vous ne devriez pas utiliser un mot de passe directement comme une clé, vous devez toujours utiliser la touche étirements premier.
C'est complètement sécurisés. Vous avez besoin d'utiliser quelque chose comme PBKDF2 pour dériver une clé forme le mot de passe. Sinon, vous êtes coincé avec le très très faible entropie du mot de passe de quelqu'un qui pouvait facilement le deviner.
OriginalL'auteur Manish
Vous êtes en train de ré-inventer la roue. À moins que vous le faites pour le plaisir, je vous recommande d'utiliser quelque chose comme AES. Si vous tapez sur google "AES en java", vous trouverez un certain nombre d'exemples.
Si vous le faites pour le plaisir et veulent quelque chose de simple à mettre en œuvre, ont un oeil à ROT13.
Voici un exemple pour les AES en Java:
Vous pouvez améliorer sur ce code.
La plupart des algorithmes de chiffrement de travail sur les octets, pas de caractères et Chaînes de caractères. Comme par l'AES spec, la clé doit être de 128, 192 ou 256 bits. Pour utiliser une chaîne comme une clé, vérifiez ceci: stackoverflow.com/questions/3451670/...
OriginalL'auteur Akshay