J'essaie de chercher la cryptographie et j'essayais cet exercice
écrire un programme (de préférence Java) pour générer un pavé unique, qui est un fichier relativement volumineux de tous données aléatoires (disons 1 Mo). Le programme devrait également être en mesure de chiffrer / déchiffrer des fichiers basés sur la Génération d'un tampon de temps. p>
Conseil: Utilisez le vecteur de test suivant pour vérifier si votre programme effectue correctement le cryptage. P>
plaintext (ASCII): chaque nuage a une doublure en argent J'ai essayé de générer un pavé unique à l'aide de générateur de nombres aléatoires, car je dois les convertir en forme d'hex. et je suis sûr que je suis sûr que je suis confus ou ne pas vous attaquer à la bonne façon p> ci-dessus serait mon pad une fois, et je me demandais comment toute idée de la manière dont je pouvais implémenter le Cryptage à l'aide du patin unique et déchiffrez-le. P> p>
OTP (HEX): 6DC72FC595E35DCD38C05DCA2A0D2DBD8E2DF20B129B2CFA29AD17972922A2
CIPHERText (hex): 28B14AB7ECC33EA157B539EA426C5E9DEF0D81627DEF0D81627DEF9404CC5 strong> P>
6 Réponses :
Pour le coussin d'une fois, vous avez besoin d'un tableau d'octets, pas d'hexadécimaux. Les hexadécimales ne sont nécessaires que pour l'affichage des données (nous avons tendance à avoir du mal à lire des bits). Vous pouvez utiliser les bibliothèques Apache Commons (Package CODEC) pour créer des hexadécimales à partir de tableaux d'octets ou de votre retour si vous souhaitez décoder les vecteurs de test des hexadécimaux à des octets. P>
Vous devez utiliser un générateur de numéros aléatoire fort> Secure STRY>, pas aléatoire code>. Donc, utilisez nouveau SECURUERANDOM () code> à la place. Pour générer des données aléatoires, créez d'abord un tableau d'octets, puis appelez SUIVERBYTES () code> sur le générateur de nombres aléatoires. Il n'est pas nécessaire de générer des entiers. P>
Bonjour, comment utiliser Apache Commons Bibliothèques? Ou obtenez-le installé dans Eclipse. Désolé pour la question noobish.
Téléchargez-le ici , décalez-le et mettez le pot dans le «chemin de construction» de votre Projet (bibliothèque externe)
Darn, cela devrait probablement être "externe .jar". Désolé :)
PS Vous n'avez pas besoin de générer des nombres aléatoires à partir de 0..15, vous devez générer un octet, qui est ensuite codé en hexagone comme des valeurs entre '00'H et' FF'H.
Bonjour, car j'ai besoin d'utiliser l'OTP qui serait le code ci-dessus, générant des personnages hexidécimaux aléatoires ... mais ma question est sur le bit de cryptage, pourriez-vous perdre une lumière pour moi?
Vous n'avez pas besoin des hexadécimaux pour le cryptage. Le cryptage est effectué sur des bits ou, car il s'agit du nombre minimal de bits une poignée d'ordinateur, sur des octets. Vous avez seulement besoin des hexadécimaux pour afficher les octets.
Merci. Je ne sais pas que je saisis ce que vous essayez de me dire, je ne comprends pas vraiment les bits et les octets part à Java ...: s désolé!
Dernier essai avant de dormir: les octets sont les données, par ex. le flux de clé OTP. Les hexadécimales sont la représentation i> de ces données pour les yeux humains. L'ordinateur ne "sait pas" des hexadécimaux, il ne peut pas utiliser xor code> sur eux. Il ne peut que xor code> bits et octets.
Tout d'abord ici est un algorithme OTP spécifié appelé hotp qui est une RFC standard. Presque tous les autres OTP sont la propriété et nous ne connaissons pas l'algorithme pour ceux-ci.
https: //www.rfc-editor.org/rfc/rfc4226 P>
Il y a du code Java là-bas, vous pouvez utiliser pour apprendre comment c'est fait. Deuxièmement, si vous allez faire du cryptage, n'utilisez pas aléatoire. Random est agréable pour Psuedo aléatoire, mais si vous voulez vraiment une bonne source de données aléatoires, vous devez adopter SIFERADANDOM. C'est une bien meilleure source de nombres aléatoires appropriés pour les algorithmes cryto. P>
pour la conversion de choses en hex, vous pouvez facilement utiliser p>
http://docs.oracle.com/javase/1.5.0/docs /api/java/math/biginteger.html#tostring.html#tostring(int) p>
ou l'une des variétés long.Tostring (valeur, Radix), entier.Tostring (valeur, radix), ou Byte.tostring (valeur, radix). P>
HOTP n'est pas un schéma de cryptage à pavé unique, c'est un algorithme de générer des mots de passe uniques- b>. (Pour des trucs comme des transactions bancaires; il est lié à ce que fait l'authentificateur Battle.net.)
Dans ce cas, il désigne un pavé de temps, pas un mot de passe de temps.
Oui, j'étais un peu confus à propos de OTP et lui disant un tampon temporel alors j'ai supposé, de manière incorrecte, il voulait des mots de passe uniques, mais j'ai gardé la réponse parce que les deux autres réponses sont toujours valables. haussement d'épaules i>
+1 Pour mentionner la plupart des OTP sont propriétaires. J'allais poser une question de révision d'un éventuel algorithme OTP, je pense maintenant que je ne suis peut-être pas simplement basé sur cela ... là encore ... que dois-je perdre?
Ici, vous avez un exemple de travail complet:
// convert secret text to byte array
final byte[] secret = "secret".getBytes()
final byte[] encoded = new byte[secret.length];
final byte[] decoded = new byte[secret.length];
// Generate random key (has to be exchanged)
final byte[] key = new byte[secret.length];
new SecureRandom().nextBytes(key);
// Encrypt
for (int i = 0; i < secret.length; i++) {
encoded[i] = (byte) (secret[i] ^ key[i]);
}
// Decrypt
for (int i = 0; i < encoded.length; i++) {
decoded[i] = (byte) (encoded[i] ^ key[i]);
}
assertTrue(Arrays.equals(secret, decoded));
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace one_time_pad
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(" TRYING\n");
Console.WriteLine("Enter : ");
int input= int.Parse( Console.ReadLine());
//random num generation
Random rnd = new Random();
int random = rnd.Next(1,10);
//binary conversion
string binary = Convert.ToString(random,2);
string inbinary = Convert.ToString(input,2);
Console.WriteLine("Data : " +input +" Binary : " + inbinary);
Console.WriteLine(" Key : " +random + " Binary : " + binary);
// taking xor
int Ghul = input ^ random;
//binary conversion
string intcon = Convert.ToString(Ghul,2);
Console.WriteLine("Encrypted : " + intcon);
Console.WriteLine(":)");
Console.Read();
}
}
}
https://fr.wikipedia.org/wiki/one-time_pad ps. Vous pouvez refacturer la méthode en tirant des chaînes et remplacez-la par des octets p>
test ("test", "1234"); code> li>
test ("test", "123"); code> li>
ul>
Output: true
..quelle est ta question?
HEX est 0123456789ABCDEF.
Pour implémenter la description, vous pouvez choisir toute transformation réversible si vous connaissez le pad. L'octet-sage xoring est la première opération de ce type qui me vient à l'esprit, mais cela ne fonctionne pas pour votre exemple de plainte + pavé + cipherext
@ millimoose, ce qui fonctionnerait pour mon exemple alors? :)
@ user1792962 Eh bien, si c'était dans un cours d'université, "Emailing l'instructeur". Ce n'est vraiment pas très facile à oeil à quel point un groupe de bits a été transformé en un autre groupe de bits.
@ user1792962 Attendez, je suis un idiot. J'ai oublié de convertir le numéro que je regardais à Hex avant de vérifier votre exemple. Oui, l'exemple Xor le plainte avec le pad.
"Générer un pad unique à l'aide de générateur de nombres aléatoires" Ce n'est pas un tampon unique si vous utilisez un PRNG pour le créer. Un coussinet unique doit être créé à l'aide d'un vrai rng non biaisé. Pourquoi utiliser un pavé unique au lieu d'un chiffre d'écoute?
@Codesinchaos Je pense que théoriquement, vous avez raison. Pratiquement parlant, cela ne fait pas une grande partie de la différence. Et ceci est clairement quelque chose d'une mission. Apprendre à faire le codage code> XOR CODE> / décodage (caractère) est important (je pense que environ 50% des questions ici sont sur le codage seuls).
Obtenir n'importe où @ user1792962?
@ user1792962 Vous pouvez utiliser aléatoire pour OTP mais pour la validation et tout ce que je pense que vous devriez préférer cet article afin que ce soit plus fort et même facile, je ne suis pas capable de comprendre votre code. Voici le lien howtodooinjava.com/security/...