2016-08-11 3 views
2

J'essaie d'obtenir ce code en PHP à Java mais j'obtiens des résultats différents, où est l'erreur?mot de passe + sel php to java

Code PHP

public function hashSSHA($password) { 

     $salt = sha1(rand()); 
     $salt = substr($salt, 0, 10); 
     $salt = "172ba59e6b"; 
     $encrypted = base64_encode(sha1($password . $salt, true) . $salt); 
     $hash = array("salt" => $salt, "encrypted" => $encrypted); 
     return $hash; 
    } 

Java

private Map senha(String password){ 
    Map<String, String> pass = new HashMap<String, String>(); 
    String salt = sha1(Integer.toString((int) Math.random())); 
    salt = salt.substring(0,10).toLowerCase(); 
    salt = "172ba59e6b"; 
    String tobase64 = toSHA1((password + salt).getBytes()) + salt; 
    byte[] encodedBytes = Base64.encodeBase64(tobase64.getBytes()); 
    String encrypted = new String(encodedBytes); 
    String[] array; 
    pass.put("salt",salt); 
    pass.put("encrypted",encrypted); 
    Log.d("asd",encrypted); 

    return pass; 

} 

fonction Java SHA1

public String sha1(String s) { 
     try { 
      // Create MD5 Hash 
      MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1"); 
      digest.update(s.getBytes()); 
      byte messageDigest[] = digest.digest(); 

      // Create Hex String 
      StringBuffer hexString = new StringBuffer(); 
      for (int i = 0; i < messageDigest.length; i++) 
       hexString.append(String.format("%02X", 0xFF & messageDigest[i])); 
      return hexString.toString(); 

     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } 
     return ""; 
    } 

Java sha1bin

public static String toSHA1(byte[] convertme) { 
     MessageDigest md = null; 
     try { 
      md = MessageDigest.getInstance("SHA-1"); 
     } 
     catch(NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } 
     return new String(md.digest(convertme)); 
    } 

Où est-ce que je me trompe? Y a-t-il un moyen simple de faire?

Sur java avec du sel = 172ba59e6b:

String tobase64 = toSHA1(("muranga21" + salt).getBytes()) + salt; 

Retour: {bvrt172ba59e6b

En PHP avec le sel = 172ba59e6b :

$sha1 = sha1("muranga21" . $salt, true) . $salt; 

Retour: {bvrt172ba59e6b

Mais quand je essayez-encode base64:

En php je suis:

o/exe6eNHGKbdvy6jd1ym6uddKExNzJiYTU5ZTZi

Sur java:

77 + 977 + 9 E ++/ve +/vRxi77 + 9DU +/ve +/vXLvv73vv73vv71077 + 9MTcyYmE1OWU2Yg = =

+3

** Vulnérabilité de sécurité: ** * Jamais * utilise un type 'String' pour contenir les mots de passe (par exemple vos méthodes' senha' et 'sha1'). Utilisez à la place des tableaux 'byte' (c'est-à-dire' byte [] ') et assurez-vous d'écraser leur contenu * avant * de jeter la référence. – ray

+1

Ne créez pas votre propre fonction de hachage de mot de passe. Utilisez l'API de hachage des mots de passe de PHP! http://php.net/password –

Répondre

0

Vous utilisez un sel aléatoire. Bien sûr, vous obtiendrez des résultats différents chaque fois que vous exécutez le code ...

+0

Je parle de crypté avec le même sel obtenu de retour différent: J'ai ajouté cette ligne: $ salt = "172ba59e6b" sur PHP et sel = "172ba59e6b" sur Java. –

+0

Sur java avec du sel 172ba59e6b: String tobase64 = toSHA1 (("muranga21" + sel) .getBytes()) + sel; Retour: { b v r t 172ba59e6b Sur PHP avec du sel 172ba59e6b: $ sha1 = sha1 ("muranga21". $ Salt, true). $ sel; Retour: {bvrt172ba59e6b Mais quand j'essaie de faire encode base64: Sur php je suis: o/exe6eNHGKbdvy6jd1ym6uddKExNzJiYTU5ZTZi Sur java: 77 + 977 + 9e ++/ve +/vRxi77 + 9du +/ve +/vXLvv73vv73vv71077 + 9MTcyYmE1OWU2Yg == –