function encrypt($string)
{
$key_para = "AIBL_#0#[email protected]";
$result = '';
$test = "";
for($i=0; $i<strlen($string); $i++)
{
$char = substr($string, $i, 1);
$a = ($i % strlen($key_para))-1;
$keychar = substr($key_para, $a, 1);
$inte = ord($char)+ord($keychar);
echo $i.'=';
echo $inte;
echo '</br>';
$char = chr($inte);
$result.=$char;
}
echo '</br>';
echo $result;
$base64t = base64_encode($result);
$res = urlencode($base64t);
$f_data = str_replace("%", "_", $res);
return $f_data;
}
的Java
public static String encrypt(String str) throws UnsupportedEncodingException
{
String key_para= "AIBL_#0#[email protected]";
String result ="";
for(int i=0; i < str.length(); i++)
{
char ch = str.charAt(i);
int a = (i % key_para.length()) -1 ;
char keyChar ;
if(a < 0) {
keyChar = key_para.charAt(key_para.length()+a);
} else if(a > 0) {
keyChar = key_para.charAt(a);
} else {
keyChar = key_para.charAt(0);
}
int temp = ((int) ch + (int) keyChar);
System.out.println(i+"="+temp);
ch = (char) temp;
System.out.println(i+"="+ch);
result += ch;
}
System.out.println(result);
String enc=java.util.Base64.getEncoder().encodeToString(result.getBytes());
String res = URLEncoder.encode(enc, "UTF-8");
String f_data = res.replace('%','_') ;
return f_data;
}
字符串进行加密:
"mobileno=01911222333&accountno=0021120125225&pin=1234"
输出应该是:
"rbCrq7jEkZ9gYFJpUnFze3R_2FklZWhJOEn5autbexiY9TYlRhU2BScnZ7dIGFk5mRbVJiVHQ_3D"
爪哇输出:
"rbCrq7jEPz9gYFJpUnFze3R_2FP1ZWPz8_2FPz_2ButbexPz9TYlRhU2BScnZ7dD8_2FPz8_2FbVJiVHQ_3D"
在两种语言的逻辑是相同的,但是它们的输出是不同的。
我在做什么错?
在使用Base64对字符串进行编码之前,两个版本中的'result'是否相同? – xander
另外我看到你的Java代码已经用'keyChar'变量扩展了逻辑,例如这是什么'keyChar = key_para.charAt(key_para.length()+ a);'?这应该抛出一个'IndexOutOfBoundsException'! – xander
°««的ΔΣ''RiRqs {吨?VV ?????®μ·±?? SbTaS'Rrv {吨????? mRbTt这是Java đ' 'RiRqs {t VV SbTaS'Rrv{t mRbTt这是在php编码之前 – Poojan