Java recréer chaîne de hashcode
Est-il possible que je peux utiliser un hashcode d'une chaîne de caractères en java, et de recréer cette chaîne?
par exemple quelque chose comme ceci:
String myNewstring = StringUtils.createFromHashCode("Hello World".hashCode());
if (!myNewstring.equals("Hello World"))
System.out.println("Hmm, something went wrong: " + myNewstring);
Je dis cela, parce que je dois transformer une chaîne de caractères en une valeur entière, et de reconstruire cette chaîne à partir de cette valeur d'entier.
pourquoi tu veux qu'en premier lieu?
Veuillez lire l'ensemble de la question.
Réponse courte: Non
et la réponse longue? Je ne me soucie pas vraiment de la taille du code, j'ai juste besoin de savoir comment le faire.
La réponse longue est la même que la réponse la plus courte, plus les mots.
Veuillez lire l'ensemble de la question.
Réponse courte: Non
et la réponse longue? Je ne me soucie pas vraiment de la taille du code, j'ai juste besoin de savoir comment le faire.
La réponse longue est la même que la réponse la plus courte, plus les mots.
OriginalL'auteur Richard J. Ross III | 2011-06-13
Vous devez vous connecter pour publier un commentaire.
C'est impossible. Le code de hachage pour la Chaîne entraîne des pertes de données; nombre de Chaîne de valeurs dans le même code de hachage. Un entier 32 bits positions et chaque position a deux valeurs. Il n'y a aucun moyen de la carte, même à seulement 32 chaînes de caractères (par exemple) (chaque personnage ayant beaucoup de possibilités) en 32 bits sans collisions. Ils ne conviennent pas.
Si vous souhaitez utiliser en précision arbitraire (par exemple, BigInteger), alors vous pouvez simplement prendre chaque personnage comme un entier et de les enchaîner tous ensemble. Voilà.
La Base 10 est l'encodage que vous utilisez.
Ce que vous avez besoin est de chiffrement/déchiffrement.
toutes les suggestions sur quel type de chiffrement à utiliser?
Je ne peux pas croire à quel absurde cette idée d'utiliser le chiffrement est. Comment diable peut-on récupérer un éventuellement infiniment long message à partir d'un texte de chiffrement qui est limité à 32 bits?
OriginalL'auteur Ted Hopp
Pas. Plusieurs Chaînes de caractères peuvent avoir le même code de hachage. En théorie, vous pourriez créer toutes les Chaînes qui ont ont que le code de hachage, mais il serait quasi-infinie.
Vous pourriez le chiffrer.
Ou vous pouvez le compresser. "Zip" de la Chaîne à l'aide de java.util.zip
Ni cryptage de, ni de compression permettra de résoudre son problème mentionné dans la question. Ce ne sont pas de la magie termes jeter sur la façon de résoudre ce qui est essentiellement un problème de perte de données.
OriginalL'auteur JustinKSU
Impossible, je le crains. Pensez-y, un hashcode est une valeur de type long c'est à dire 8 octets. Une chaîne peut-être moins que cela, mais aussi pourrait être beaucoup plus longue, vous ne pouvez pas presser une longue chaîne en 8 octets sans perdre quelque chose.
La Java hashcode algorithme sommes tous les 8 octets si je me souviens bien, donc, si vous voulez perdre 7 sur 8 octets. Si vos cordes sont tous très court puis vous pourrait coder comme un int ou un long temps sans rien perdre.
OriginalL'auteur Andrew
Supposons que la chaîne est composée uniquement de lettres, de chiffres et de signes de ponctuation, il y a donc environ 70 caractères.
log_70{2^32} = 5.22...
Cela signifie que pour tout nombre entier donné, vous trouverez un 5 - ou 6-chaîne de caractères avec ce code de hachage. Ainsi, la récupération de
"Hello World"
: impossible; mais"Hello"
pourrait fonctionner si vous avez de la chance.Un cas très intéressant de trouver en effet. Hélas, la question implique qu'une chaîne de caractères arbitraire, ou au moins une séquence de plusieurs mots, doit être stocké.
OriginalL'auteur Cephalopod
Par exemple, "1019744689" et "123926772" les deux ont un hashcode de -1727003481. Cela prouve que pour tout entier, vous pourriez obtenir un résultat différent (c'est à dire
reversehashcode(hashcode(string)) != string
).OriginalL'auteur HyperNeutrino