5 votes

Comment générer un nonce et l'imprimer côté client sous Android ?

Je travaille actuellement sur un programme pour Android qui est lié à IMS. Je veux que le serveur renvoie un nonce au client sous forme de chaîne de caractères et l'imprime côté client.

Une partie de mon code, de Générer un numéro aléatoire sécurisé :

public static String generateNonce() { 
  try {
   // Create a secure random number generator
   SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");

   // Get 1024 random bits
   byte[] bytes = new byte[1024/8];
   sr.nextBytes(bytes);

   // Create two secure number generators with the same seed
   int seedByteCount = 10;
   byte[] seed = sr.generateSeed(seedByteCount);

   sr = SecureRandom.getInstance("SHA1PRNG");
   sr.setSeed(seed);
   SecureRandom sr2 = SecureRandom.getInstance("SHA1PRNG");
   sr2.setSeed(seed);
   } catch (NoSuchAlgorithmException e) {
  }
  //return NONCE;
  return null;
 }

J'ai déclaré NONCE = generateNonce(); au début. Mais le problème est qu'au lieu d'obtenir une valeur de nonce, il imprime nul du côté du client. Lorsque j'ai essayé de l'imprimer du côté du serveur, il semble que ce soit également le cas. nul .

Quelqu'un peut-il m'éclairer sur l'erreur dans mon code ou m'aider à trouver un code meilleur ou plus approprié ?

7voto

Anthony Forloney Points 30083

Vous devez ajouter le return à la valeur que vous souhaitez renvoyer, à ce stade, votre code génère (ou semble générer) le NONCE mais vous renvoyez null donc la Chaîne NONCE se voit attribuer une valeur de null .

Vous devez également supprimer le return null déclaration. Si vous le laissez et qu'il s'agit de la dernier votre code générera une déclaration de retour valide NONCE mais renverra null .

2voto

Cetra Points 1741

Je commencerais par vérifier le format de votre code, car il est assez illisible.

Ensuite, je supprimerais la deuxième instance SecureRandom.

Ensuite, j'enlèverais le return null; à la fin.

Je réécrirais ensuite la fonction pour qu'elle renvoie un nombre entier aléatoire comme suit :

 return sr.next(32);

Il faut également s'assurer que la fonction est déclarée pour renvoyer un entier plutôt qu'une chaîne de caractères.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X