将MD5 messageDigest从Java转换为Digest::MD5 Ruby
我想在ruby上像java代码一样使用Digest::MD5。 这是java代码:将MD5 messageDigest从Java转换为Digest::MD5 Ruby,java,ruby-on-rails,ruby,Java,Ruby On Rails,Ruby,我想在ruby上像java代码一样使用Digest::MD5。 这是java代码: public static String MD5Encode(String input, String salt) { try { MessageDigest messageDigest = MessageDigest.getInstance("MD5"); byte[] hash = null; try {
public static String MD5Encode(String input, String salt) {
try {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] hash = null;
try {
messageDigest.update(salt.getBytes("UTF-8"));
messageDigest.update(input.getBytes("UTF-8"));
hash = messageDigest.digest();
} catch (UnsupportedEncodingException exception) {
logger.error("MD5Encoder:Encode:" + exception.toString());
}
if (hash != null) {
StringBuilder output = new StringBuilder(2 * hash.length);
for (byte b : hash) {
output.append(String.format("%02x", b & 0xff));
}
return output.toString();
}
} catch (NoSuchAlgorithmException exception) {
logger.error("MD5Encoder:Encode:" + exception.toString());
}
return null;
}
这是ruby代码,但结果不正确:
java中的输入变量是ruby上的password变量,两者上的salt变量相同
salt = SecureRandom.hex
if (params[:gamestate_password] != "")
password = Digest::MD5.hexdigest(params[:gamestate_password] + salt)
user_query = "UPDATE user_v54 SET password= '#{password}', passwordSalt= '#{salt}' WHERE userId='#{params[:userId]}'"
end
您应该在ruby中按与java中相同的顺序将盐放在密码前面:
password = Digest::MD5.hexdigest(salt + params[:gamestate_password])
在java中,你把盐放在密码前面,在ruby中则相反。谢谢,我知道了。看起来很好!