Java 类似于用于android密码登录的php的sha512
我有我的php应用程序,当我创建用户时,我运行了这个Java 类似于用于android密码登录的php的sha512,java,php,android,hash,passwords,Java,Php,Android,Hash,Passwords,我有我的php应用程序,当我创建用户时,我运行了这个 $random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true)); // Create salted password $userPwd = hash('sha512', $userPwd . $random_salt); 下一步,当我试图登录时,我已经捕获了密码,我通过这个javascript散列 p、 value=hex_sha512
$random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true));
// Create salted password
$userPwd = hash('sha512', $userPwd . $random_salt);
下一步,当我试图登录时,我已经捕获了密码,我通过这个javascript散列
p、 value=hex_sha512(userPwdControl.value)
然后在接下来的时间里
$hashPassword = hash('sha512', $userPassword . $row1['userSalt']);
以上所有代码都是通过php实现的
现在通过我的android,我想做这个函数p.value=hex_sha512(userPwdControl.value);为了得到散列,我首先通过java代码进行尝试,如下所示。但我得到了下面的空结果
StringBuffer stringBuffer = new StringBuffer();
try {
String message = "myPass";
MessageDigest digest = MessageDigest.getInstance("512");
byte[] hashedBytes = digest.digest(message.getBytes("UTF-8"));
for (int i = 0; i < hashedBytes.length; i++) {
stringBuffer.append(Integer.toString((hashedBytes[i] & 0xff) + 0x100, 16)
.substring(1));
}
stringBuffer.toString();
} catch (NoSuchAlgorithmException | UnsupportedEncodingException ex) {
}
System.out.println("TEST :"+stringBuffer);
StringBuffer StringBuffer=新的StringBuffer();
试一试{
String message=“myPass”;
MessageDigest=MessageDigest.getInstance(“512”);
byte[]hashedBytes=digest.digest(message.getBytes(“UTF-8”);
for(int i=0;i
你能试试下面的代码吗。在代码中做了一些小改动
String resultString = "";
try {
byte[] buffer = password.getBytes();
MessageDigest md = MessageDigest.getInstance("SHA-512");
md.update(buffer);
byte[] digest = md.digest();
for(int i = 0 ; i < digest.length ; i++) {
int b = digest[i] & 0xff;
if(Integer.toHexString(b).length() == 1)
resultString = resultString + "0";
resultString = resultString + Integer.toHexString(b);
}
} catch(NoSuchAlgorithmException e) {
e.printStackTrace();
}
String resultString=”“;
试一试{
字节[]缓冲区=密码。getBytes();
MessageDigest md=MessageDigest.getInstance(“SHA-512”);
md.update(缓冲区);
字节[]摘要=md.digest();
for(int i=0;i
您的问题似乎已经解决,但我强烈建议您切换到更安全的哈希算法。单个SHA-512无法保护您的用户密码,因为它太快了(),因此很容易被强制使用
您需要的是具有成本因子的哈希函数,如BCrypt、PBKDF2或SCrypt。PHPs函数password_hash()目前实现了BCrypt,这是一个兼容的实现,您可以使用。是的,它工作正常,我的错误在哪里?另一件事是我在为android flow做正确的事情吗?在创建MessageDigest实例时查看您的算法名称。还返回一个十六进制字符串并附加到缓冲区,您的缓冲区只是一个字符串。我可以在android中使用它登录我的数据库吗?我可以通过php登录数据库吗?谢谢,因为我对这个非常陌生,我将它标记为您的answer@marin那么你有什么最好的建议?如果我改变了这一点,那么所有的用户密码和盐也需要在数据库中改变吗?你建议什么功能最好?那么我会在java中为它找到一个兼容的函数吗?@user5313398-在您使用salted SHA-512的情况下,我会在您现有的哈希上使用BCrypt,有关更多详细信息,请参阅此。使用BCrypt还有一个优点,即不需要单独存储盐,只需确保字段足够大
varchar(255)
。链接的jBcrypt库是一个Java实现,应该与PHP兼容hashes@matin谢谢你的链接,我得到了另一个问题,我有两个部分,一个是使用php的web部件。然后我还有我的另一部分,即ios(swift 3)和android手机。既然我还没有开发我刚开始在android上开发的那部分,那么我以后会不会对ios产生问题?@user5313398-我很确定你可以找到ios的实现(BCrypt是一种众所周知的经验证的算法),但不幸的是,我对苹果世界并不熟悉,所以我不能推荐任何图书馆。那么你是在向你推荐Brcrpyt吗?我不太明白它的盐和沙512有什么不同?