【发布时间】:2018-07-02 12:40:32
【问题描述】:
我正在开发一个需要对本地网站上创建的帐户进行身份验证的 java 项目。这些帐户的密码在插入数据库之前由 php 函数加密:
public function crypter($mdp){
$j = 0;
$tmp = 0;
$key = $mdp;
$res = "";
for($i = 0; $i < strlen($mdp) ; $i++)
{
$tmp = ord($mdp[$i]) + ord($key[$i]);
if($tmp > 255){
$tmp = $tmp - 256;
}
$res[$i] = chr($tmp);
if($j == strlen($key)-1){
$j = 0;
}
else{
$j = (($j % (strlen($key))) +1 );
}
}
$res = base64_encode($res);
return $res;
}
注意:这个函数不是我写的,所以如果你们弄清楚$j 变量的用途,请告诉我。我也(显然)无法更改此代码。
所以我尝试在 Java 中翻译这个函数:
public String cryptMdp(String mdp){
String res = "";
String key = mdp;
int j = 0;
int tmp = 0;
for (int i = 0; i < mdp.length(); i++) {
char c = mdp.charAt(i);
char c2 = key.charAt(i);
tmp = (int) c + (int) c2;
if (tmp > 255) {
tmp = tmp - 256;
}
res += (char) tmp;
if (j == key.length() - 1){
j = 0;
}
else{
j = (j % key.length()) + 1;
}
}
return Base64.getMimeEncoder().encodeToString(res.getBytes());
}
不幸的是,那些不返回相同的字符串(例如:对于字符串a,php 返回wg==,Java 返回w4I=。),即使根据this question 这应该是一个标准.
你们能看出我做错了什么吗?
【问题讨论】:
-
@Penguine 已经看到了,但是这个家伙的解决方案是使用 hmac,我没有在我的情况下使用它
-
检查 java 和 php 中的字符集。它们可以不同。还有一件事 - java 在其字符串中使用 wchar。