2016-08-11 23 views
2

私はこのコードをPHPでJavaに取得しようとしていますが、別の結果が出ていますが、エラーはどこですか?パスワード+塩php to java

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; 

} 

の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)); 
    } 

どこが間違っていますか?簡単なやり方はありますか?

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

リターン:{

bvrt172ba59e6b PHPに対する塩= 172ba59e6bとの塩= 172ba59e6bとJavaを

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

戻る:{bvrt172ba59e6b

しかし、私base64でエンコードを行う試してください。

PHPで私が得た:Javaを

O/exe6eNHGKbdvy6jd1ym6uddKExNzJiYTU5ZTZi

77 + 977 + 9E ++/VEの+/vRxi77 + 9du +/VEの+/vXLvv73vv73vv71077 + 9MTcyYmE1OWU2Yg = =

+3

セキュリティ上の脆弱性**パスワードを保持するために 'String'型を使用しないでください(例:' senha'と 'sha1'メソッド)。 'byte'配列(つまり' byte [] ')を代わりに使用し、その内容を上書きしてから参照を破棄するようにしてください。 – ray

+1

独自のパスワードハッシュ関数を作成しないでください。 PHPのパスワードハッシングAPIを使用してください! http://php.net/password –

答えて

0

あなたはランダムな塩を使用しています。もちろん、コードを実行するたびに異なる結果が得られます。

+0

私は同じ塩で暗号化されたものについて話しています。 私はこの行を追加しました:$ salt = "172ba59e6b" on PHPとsalt = "172ba59e6b" on Java。 –

+0

Javaの塩172ba59e6bの場合: 文字列tobase64 = toSHA1(( "muranga21" + salt).getBytes())+ salt; 戻り値: { b v r t172ba59e6b PHPの塩172ba59e6bの場合: $ sha1 = sha1( "muranga21"。$ salt、true)。 $塩; リターン:{ bvrt172ba59e6bしかし、私は、base64でエンコード行いしようとすると:PHPで を私が得た:Javaを O/exe6eNHGKbdvy6jd1ym6uddKExNzJiYTU5ZTZi : 77 + 977 + 9e ++/ve +/vRxi77 + 9du +/ve +/vXLvv73vv73vv71077 + 9MTcyYmE1OWU2Yg == –

関連する問題