Une petite question toute simple :
quelle est la meilleure façon de passer d'un tableau de char (char[]) à
un tableau d'octets (byte[]) ? Je ne souhaite pas passer par une String
(pour des raisons de sécurité).
Et comment faire la transformation inverse de byte[] vers char[] ?
En fait je vais me servir de ces transformations pour passer en MD5
(avec java.security.MessageDigest) un mot de passe récupéré d'un
JPasswordField. Peut-être avez-vous une bonne façon de faire ça ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Richard
Alors une question encore plus simple : quelle est la meilleure façon de transformer élément par élément un tableau de char qui contient un mot de passe, en un tableau de byte, et vice-versa ?
Je ne trouve pas de solution évidente, mais il doit bien en exister une.
Richard
Richard wrote:
Bonjour,
Une petite question toute simple : quelle est la meilleure façon de passer d'un tableau de char (char[]) à un tableau d'octets (byte[]) ? Je ne souhaite pas passer par une String (pour des raisons de sécurité).
Pour toutes tes questions, je vote pour le paquetage java.nio et ses buffers. Je ne vois pas exactement comment cela va se passer, mais cela me parait jouable.
Cela dit, si c'est juste pour un mot de passe, peut être juste une boucle for qui transmute les char en byte et vice-versa ?...
Alors une question encore plus simple :
quelle est la meilleure façon de transformer élément par élément un
tableau de char qui contient un mot de passe, en un tableau de byte, et
vice-versa ?
Je ne trouve pas de solution évidente, mais il doit bien en exister une.
Richard
Richard wrote:
Bonjour,
Une petite question toute simple :
quelle est la meilleure façon de passer d'un tableau de char (char[]) à
un tableau d'octets (byte[]) ? Je ne souhaite pas passer par une String
(pour des raisons de sécurité).
Pour toutes tes questions, je vote pour le paquetage java.nio et ses
buffers. Je ne vois pas exactement comment cela va se passer, mais cela me
parait jouable.
Cela dit, si c'est juste pour un mot de passe, peut être juste une boucle
for qui transmute les char en byte et vice-versa ?...
Alors une question encore plus simple : quelle est la meilleure façon de transformer élément par élément un tableau de char qui contient un mot de passe, en un tableau de byte, et vice-versa ?
Je ne trouve pas de solution évidente, mais il doit bien en exister une.
Richard
Richard wrote:
Bonjour,
Une petite question toute simple : quelle est la meilleure façon de passer d'un tableau de char (char[]) à un tableau d'octets (byte[]) ? Je ne souhaite pas passer par une String (pour des raisons de sécurité).
Pour toutes tes questions, je vote pour le paquetage java.nio et ses buffers. Je ne vois pas exactement comment cela va se passer, mais cela me parait jouable.
Cela dit, si c'est juste pour un mot de passe, peut être juste une boucle for qui transmute les char en byte et vice-versa ?...
Hervé AGNOUX
Richard wrote:
Bonjour,
Une petite question toute simple : quelle est la meilleure façon de passer d'un tableau de char (char[]) à un tableau d'octets (byte[]) ? Je ne souhaite pas passer par une String (pour des raisons de sécurité).
Pour toutes tes questions, je vote pour le paquetage java.nio et ses buffers. Je ne vois pas exactement comment cela va se passer, mais cela me parait jouable.
Cela dit, si c'est juste pour un mot de passe, peut être juste une boucle for qui transmute les char en byte et vice-versa ?...
-- Hervé AGNOUX http://www.diaam-informatique.com
Richard wrote:
Bonjour,
Une petite question toute simple :
quelle est la meilleure façon de passer d'un tableau de char (char[]) à
un tableau d'octets (byte[]) ? Je ne souhaite pas passer par une String
(pour des raisons de sécurité).
Pour toutes tes questions, je vote pour le paquetage java.nio et ses
buffers. Je ne vois pas exactement comment cela va se passer, mais cela me
parait jouable.
Cela dit, si c'est juste pour un mot de passe, peut être juste une boucle
for qui transmute les char en byte et vice-versa ?...
Une petite question toute simple : quelle est la meilleure façon de passer d'un tableau de char (char[]) à un tableau d'octets (byte[]) ? Je ne souhaite pas passer par une String (pour des raisons de sécurité).
Pour toutes tes questions, je vote pour le paquetage java.nio et ses buffers. Je ne vois pas exactement comment cela va se passer, mais cela me parait jouable.
Cela dit, si c'est juste pour un mot de passe, peut être juste une boucle for qui transmute les char en byte et vice-versa ?...
-- Hervé AGNOUX http://www.diaam-informatique.com
Syrion
Alors une question encore plus simple : quelle est la meilleure façon de transformer élément par élément un tableau de char qui contient un mot de passe, en un tableau de byte, et vice-versa ? Evite le package java.nio si tu n'est pas allé dans les sources vérifier
que le buffer pouvait être écrasé. Si tu ne veux pas passer apr une String, j'imagine que tu ne veux pas que ton mot de passe reste moisir dans un buffer... Donc pour transformer un byte[] en char[], il existe 2 manières : 1) Celle qui est super compliquée et qui permet de transcoder les caractères 2) Celle qui est super simple et qui suppose que : - soit tu fais char->byte et kamais l'inverse - soit tu fais char->byte puis byte->char en considérant que les caractères ne changent pas de Locale (jeu de caractère)... Je pense que c'est la 2 qui t'intéresse Alors c'est simple, dans une boucle for, tu caste tes char en int, comme ça les 2 octets de chaque caractère logent. Avec des opérations binaires, tu remplis 2 bytes avec les 16bits bas de ton int. puis en fin de boucle, tu effaces les cases de ton char[]... int temp=0; int b=0; byte [] passwordBytes; //on suppose que l'argument est passwordChars et qu'il est de type char [] passwordBytes=new byte[passwordChars*2];//car 1 char = 16bits for(int c=0; c<=passwordChars.length; c++){ temp=(int)passwordChars[c]; passwordBytes[b+1]=(byte)(temp&0xFF); passwordBytes[b]=(byte)((temp>>>8)&0xFF); b+=2; } temp=0xFFFFFFFF; temp=0;//pour les paranos for(int c=0; c<=passwordChars.length; c++){ passwordChars[c]='uFFFF'; passwordChars[c]=' '; } Ton tableau de byte contien les caractères donc : 1 byte = partie haute du char 1 1 byte = partie basse du char 1 puis 2ème paire de byte pour le char 2, etc...
Alors une question encore plus simple :
quelle est la meilleure façon de transformer élément par élément un
tableau de char qui contient un mot de passe, en un tableau de byte, et
vice-versa ?
Evite le package java.nio si tu n'est pas allé dans les sources vérifier
que le buffer pouvait être écrasé. Si tu ne veux pas passer apr une
String, j'imagine que tu ne veux pas que ton mot de passe reste moisir
dans un buffer...
Donc pour transformer un byte[] en char[], il existe 2 manières :
1) Celle qui est super compliquée et qui permet de transcoder les caractères
2) Celle qui est super simple et qui suppose que :
- soit tu fais char->byte et kamais l'inverse
- soit tu fais char->byte puis byte->char en considérant que les
caractères ne changent pas de Locale (jeu de caractère)...
Je pense que c'est la 2 qui t'intéresse
Alors c'est simple, dans une boucle for, tu caste tes char en int, comme
ça les 2 octets de chaque caractère logent.
Avec des opérations binaires, tu remplis 2 bytes avec les 16bits bas de
ton int.
puis en fin de boucle, tu effaces les cases de ton char[]...
int temp=0;
int b=0;
byte [] passwordBytes;
//on suppose que l'argument est passwordChars et qu'il est de type char []
passwordBytes=new byte[passwordChars*2];//car 1 char = 16bits
for(int c=0; c<=passwordChars.length; c++){
temp=(int)passwordChars[c];
passwordBytes[b+1]=(byte)(temp&0xFF);
passwordBytes[b]=(byte)((temp>>>8)&0xFF);
b+=2;
}
temp=0xFFFFFFFF;
temp=0;//pour les paranos
for(int c=0; c<=passwordChars.length; c++){
passwordChars[c]='uFFFF';
passwordChars[c]=' ';
}
Ton tableau de byte contien les caractères donc :
1 byte = partie haute du char 1
1 byte = partie basse du char 1
puis 2ème paire de byte pour le char 2, etc...
Alors une question encore plus simple : quelle est la meilleure façon de transformer élément par élément un tableau de char qui contient un mot de passe, en un tableau de byte, et vice-versa ? Evite le package java.nio si tu n'est pas allé dans les sources vérifier
que le buffer pouvait être écrasé. Si tu ne veux pas passer apr une String, j'imagine que tu ne veux pas que ton mot de passe reste moisir dans un buffer... Donc pour transformer un byte[] en char[], il existe 2 manières : 1) Celle qui est super compliquée et qui permet de transcoder les caractères 2) Celle qui est super simple et qui suppose que : - soit tu fais char->byte et kamais l'inverse - soit tu fais char->byte puis byte->char en considérant que les caractères ne changent pas de Locale (jeu de caractère)... Je pense que c'est la 2 qui t'intéresse Alors c'est simple, dans une boucle for, tu caste tes char en int, comme ça les 2 octets de chaque caractère logent. Avec des opérations binaires, tu remplis 2 bytes avec les 16bits bas de ton int. puis en fin de boucle, tu effaces les cases de ton char[]... int temp=0; int b=0; byte [] passwordBytes; //on suppose que l'argument est passwordChars et qu'il est de type char [] passwordBytes=new byte[passwordChars*2];//car 1 char = 16bits for(int c=0; c<=passwordChars.length; c++){ temp=(int)passwordChars[c]; passwordBytes[b+1]=(byte)(temp&0xFF); passwordBytes[b]=(byte)((temp>>>8)&0xFF); b+=2; } temp=0xFFFFFFFF; temp=0;//pour les paranos for(int c=0; c<=passwordChars.length; c++){ passwordChars[c]='uFFFF'; passwordChars[c]=' '; } Ton tableau de byte contien les caractères donc : 1 byte = partie haute du char 1 1 byte = partie basse du char 1 puis 2ème paire de byte pour le char 2, etc...
Alain
le truc normal c'est d'utiliser un Writer de mémoire (sans javadoc sous la main)
ByteArrayInputStream bas=new ByteArrayInputStream(); Writer w=new Writer(bas,"iso-8859-1");// ou UTF8 ou iso-8859-15, ou autre... w.write(charactersArray); w.flush();
byte[]resºs.getBytes();
j'ai pu me planter de noms
normalement toute autre technique manuelle est source de problèmes avec les accents...
Alors une question encore plus simple : quelle est la meilleure façon de transformer élément par élément un tableau de char qui contient un mot de passe, en un tableau de byte, et vice-versa ?
le truc normal c'est d'utiliser un Writer
de mémoire (sans javadoc sous la main)
ByteArrayInputStream bas=new ByteArrayInputStream();
Writer w=new Writer(bas,"iso-8859-1");// ou UTF8 ou iso-8859-15, ou autre...
w.write(charactersArray);
w.flush();
byte[]resºs.getBytes();
j'ai pu me planter de noms
normalement toute autre technique manuelle est source de problèmes avec
les accents...
Alors une question encore plus simple :
quelle est la meilleure façon de transformer élément par élément un
tableau de char qui contient un mot de passe, en un tableau de byte, et
vice-versa ?
le truc normal c'est d'utiliser un Writer de mémoire (sans javadoc sous la main)
ByteArrayInputStream bas=new ByteArrayInputStream(); Writer w=new Writer(bas,"iso-8859-1");// ou UTF8 ou iso-8859-15, ou autre... w.write(charactersArray); w.flush();
byte[]resºs.getBytes();
j'ai pu me planter de noms
normalement toute autre technique manuelle est source de problèmes avec les accents...
Alors une question encore plus simple : quelle est la meilleure façon de transformer élément par élément un tableau de char qui contient un mot de passe, en un tableau de byte, et vice-versa ?