0

我正在尝试将一个“简单”的字符串加密算法从 Java 移植到 PHP,它使用了足够多的特定 Java 库的模糊位,我正在把头撞到墙上。我希望 SO 社区可以提供帮助。这是Java:

public static String encode(String str) throws Exception {
    MessageDigest md = MessageDigest.getInstance("SHA-1");
    md.reset();
    return (new BASE64Encoder()).encode(md.digest(str.getBytes("UTF-8")));
}

直观地说,我认为 PHP 中的等价物类似于:

base64_encode(sha1($str));

但这不起作用。我猜这与使用getBytes有关吗?


编辑:这是我得到的几个例子:

  • “花园”的 Java 编码:sa3lMQV/UcKZJHkzXQO3dK/etvo=
  • “花园”的 PHP 编码:YjFhZGU1MzEwNTdmNTFjMjk5MjQ3OTMzNWQwM2I3NzRhZmRlYjZmYQ==

  • “WhyJavaWhy”的Java编码:oJTJIq6WJM8P9rFPnZdoyK/WBK4=

  • “WhyJavaWhy”的 PHP 编码:YTA5NGM5MjJhZTk2MjRjZjBmZjZiMTRmOWQ5NzY4YzhhZmQ2MDRhZQ==
4

2 回答 2

1

这有效:

base64_encode(sha1($str, TRUE));

$ php -r "echo base64_encode(sha1('garden', TRUE));"
sa3lMQV/UcKZJHkzXQO3dK/etvo=
于 2011-02-08T18:03:47.530 回答
0

尝试

base64_encode(sha1(utf8_encode($str)));
于 2011-02-08T00:30:36.430 回答