Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将MD5 messageDigest从Java转换为Digest::MD5 Ruby_Java_Ruby On Rails_Ruby - Fatal编程技术网

将MD5 messageDigest从Java转换为Digest::MD5 Ruby

将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 {

我想在ruby上像java代码一样使用Digest::MD5。 这是java代码:

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中则相反。谢谢,我知道了。看起来很好!