Une fois pad, le chiffrement et le déchiffrement
Je suis en train de ramasser de la cryptographie et avait essayé cet exercice
Écrire un programme (de préférence Java) pour générer un pad, ce qui est relativement grand fichier de tous les
données aléatoires (disons 1 MO). Le programme devrait également être en mesure de crypter/décrypter des fichiers basé sur le
généré une fois le pad.
Astuce: utilisez la suite de vecteur de test pour vérifier si votre programme ne chiffrement correctement.
Texte brut (ASCII): Chaque nuage a une doublure argentée
OTP (HEX): 6dc72fc595e35dcd38c05dca2a0d2dbd8e2df20b129b2cfa29ad17972922a2
cryptogramme (HEX): 28b14ab7ecc33ea157b539ea426c5e9def0d81627eed498809c17ef9404cc5
J'ai essayé de générer un pad à l'aide du générateur de nombres aléatoires que j'ai besoin de les convertir au format hexadecimal. et je suis assez sûr que je suis confus ou de ne pas aborder de la bonne façon
public static void oneTimePad()
{
Random ran = new Random();
String s = "0123456789ABCDEF";
for(int i = 0; i < 100; i++)
{
System.out.print(s.charAt(ran.nextInt(s.length())));
}
}
Ci-dessus serait mon one time pad, et je me demandais comment une idée de comment je pourrais mettre en œuvre le chiffrement à l'aide de la ventouse et le décrypter.
Hex est 0123456789ABCDEF.
Pour mettre en œuvre la description vous pouvez choisir n'importe quelle transformation est réversible si vous connaissez la tablette. octet-sage XORing est la première opération de ce type qui vient à l'esprit, mais il ne fonctionne pas pour votre exemple de texte en clair+pad+cryptogramme
serait travailler pour mon exemple alors? 🙂
Eh bien, si c'était dans un cours de niveau collégial, "envoyant un courriel à l'instructeur". C'est vraiment pas très facile de globe oculaire comment un groupe de bits a été transformé en un tas de bits.
OriginalL'auteur user1792962 | 2012-11-02
Vous devez vous connecter pour publier un commentaire.
Ici vous avez un exemple de travail:
OriginalL'auteur Maciej A. Bednarz
Pour le pad, vous aurez besoin d'un tableau d'octets, pas de caractères hexadécimaux. Les caractères hexadécimaux sont requis uniquement pour l'affichage des données (nous avons tendance à avoir des problèmes de lecture de bits). Vous pouvez utiliser l'Apache Commons bibliothèques (codec package) pour créer des caractères hexadécimaux de tableaux d'octets, ou si vous voulez décoder les vecteurs de test à partir de caractères hexadécimaux d'octets.
Vous devez utiliser un sécurisé générateur de nombre aléatoire, pas
Random
. Donc, utilisernew SecureRandom()
à la place. Pour générer des données aléatoires, commencez par créer un tableau d'octets, puis d'appelernextBytes()
sur le générateur de nombre aléatoire. Il n'y a pas besoin de générer des nombres entiers.Télécharger ici, décompressez-le et placez le pot dans le "build path" de votre projet (bibliothèque externe)
Darn, qui devrait probablement être "externe .jar". Désolé pour ça 🙂
No problemo..merci
PS vous n'avez pas besoin de générer des nombres aléatoires à partir de 0..15, vous avez besoin de générer un octet, qui est ensuite codée en hexadécimal, en tant que valeurs entre '00 h et 'FF h.
OriginalL'auteur Maarten Bodewes
D'abord voici un OTP algorithme spécifié appelé HOTP qui est une norme RFC. Presque tous les autres OTP sont la propriété et nous ne savons pas l'algorithme pour ceux.
http://tools.ietf.org/html/rfc4226
Il y a certains de code java dans la vous pouvez utiliser pour apprendre son fait. Deuxième, si vous allez faire de chiffrement n'utilisez pas de Hasard. Aléatoire est agréable pour les pseudo aléatoire, mais si vous voulez vraiment une bonne source de données aléatoires vous avez besoin d'adopter SecureRandom. C'est une bien meilleure source de nombres aléatoires qui sont adaptés pour les cryto algorithmes.
Pour la conversion de choses à Hex, vous pouvez facilement utiliser
http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html#toString(int)
Ou l'une des variétés de Long.toString(valeur,radix), Entier.toString(valeur,radix), ou d'Octets.toString(valeur,radix).
Dans ce cas, il signifie un temps pad, pas une seule fois le mot de passe.
Oui j'ai été un peu confus sur le bureau du procureur et lui dire une fois pad donc, je suppose, à tort, qu'il a voulu Une seule Fois les mots de passe, mais j'ai gardé la réponse parce que les deux autres réponses sont toujours valables. Haussement d'épaules
+1 pour la mention de la plupart des BDP sont propriétaires. J'allais poser une question pour l'examen d'un possible OTP algorithme, maintenant, je pense que je ne peut pas juste en fonction du...... que dois-je à perdre?
OriginalL'auteur chubbsondubs
OriginalL'auteur Hur Abbas
https://en.wikipedia.org/wiki/One-time_pad
test("test","1234");
test("test","123");
ps. vous pouvez restructurer par la méthode de tirer des chaînes et de les remplacer par des octets
OriginalL'auteur ceph3us