急! php写的加密函数如何用java解密

<?php
$key = "This is supposed to be a secret key !!!";

function keyED($txt,$encrypt_key)
{
$encrypt_key = md5($encrypt_key);
$ctr=0;
$tmp = "";
for ($i=0;$i<strlen($txt);$i++)
{
if ($ctr==strlen($encrypt_key)) $ctr=0;
$tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1);
$ctr++;
}
return $tmp;
}

function encrypt($txt,$key)
{
srand((double)microtime()*1000000);
$encrypt_key = md5(2000);
$ctr=0;
$tmp = "";
for ($i=0;$i<strlen($txt);$i++)
{
if ($ctr==strlen($encrypt_key)) $ctr=0;
$tmp.= substr($encrypt_key,$ctr,1) .
(substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1));
$ctr++;
}
return keyED($tmp,$key);
}

function decrypt($txt,$key)
{
$txt = keyED($txt,$key);
$tmp = "";
for ($i=0;$i<strlen($txt);$i++)
{
$md5 = substr($txt,$i,1);
$i++;
$tmp.= (substr($txt,$i,1) ^ $md5);
}
return $tmp;
}

$string = "Hello World !!!";

// encrypt $string, and store it in $enc_text
$enc_text = encrypt($string,$key);

// decrypt the encrypted text $enc_text, and store it in $dec_text
$dec_text = decrypt($enc_text,$key);

print "Original text : $string <br>";
print "Encrypted text : $enc_text <br>";
print "Decrypted text : $dec_text <br>";
?>
请问以上的php加密函数对应的java代码应该怎样写啊。我依照php的代码写了java的解密方法不能用啊。

php,jsp,delphi多语言兼容的简单的加密解密算法,jsp目前暂时没有实现中文的加密解密兼容。希望哪路高手能帮忙补上。
1,php的需要对以上代码稍加修改,内容如下:
<?php

$key = "admin";

function keyED($txt,$encrypt_key) {
$encrypt_key = md5($encrypt_key);
$ctr=0;
$tmp = "";
for ($i=0;$i<strlen($txt);$i++){
if ($ctr==strlen($encrypt_key)) $ctr=0;
$tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1);
$ctr++;
}
return $tmp;
}

function encrypt($txt,$key){
srand((double)microtime()*1000000);
$encrypt_key = md5(rand(0,32000));
$ctr=0;
$tmp = "";
for ($i=0;$i<strlen($txt);$i++){
if ($ctr==strlen($encrypt_key)) $ctr=0;
$bbb=substr($encrypt_key,$ctr,1) .
(substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1));
$tmp.= $bbb;
$ctr++;
}
return base64_encode(keyED($tmp,$key));
}

function decrypt($txt,$key){
$txt=base64_decode($txt);
$txt = keyED($txt,$key);
$tmp = "";
for ($i=0;$i<strlen($txt);$i++){
$md5 = substr($txt,$i,1);
$i++;
$tmp.= (substr($txt,$i,1) ^ $md5);
}
return $tmp;
}

$string = "hello world!";

// encrypt $string, and store it in $enc_text
$enc_text = encrypt($string,$key);

// decrypt the encrypted text $enc_text, and store it in $dec_text
$dec_text = decrypt($enc_text,$key);
echo "原字符串: ".$string."<br/>";
echo "加密字符串: ".$enc_text."<br/>";
echo "解密字符串: ".$dec_text."<br/>";
?>
2,jsp代码(java类)
package com.intwork.struct.common;

import java.util.Random;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class KeyED {

public char[] keyED(char[] cText,String encrype_key){
encrype_key=MD5.getInstance(encrype_key).encrypt();
int ctr=0;
char[] cEncrype_key=encrype_key.toCharArray();
char[] temp=new char[cText.length];
int ind=0;
String tmp="";
for(int i=0;i<cText.length;i++){
if(ctr==cEncrype_key.length){
ctr=0;
}
temp[ind++]=(char)(cText[i] ^ cEncrype_key[ctr]);
ctr++;
}
return temp;
}

public String encrype(String text,String key){
String encrype_key=MD5.getInstance(String.valueOf(new Random().nextInt(1000000))).encrypt();
int ctr=0;
char[] cText=text.toCharArray();
char[] cEncrype_key=encrype_key.toCharArray();
char[] temp=new char[cText.length*2];
int ind=0;
String tmp="";
for(int i=0;i<cText.length;i++){
if(ctr==cEncrype_key.length){
ctr=0;
}
temp[ind++]=cEncrype_key[ctr];
temp[ind++]=(char)(cText[i]^cEncrype_key[ctr]);
ctr++;
}
BASE64Encoder b = new sun.misc.BASE64Encoder();
return b.encode(new String(this.keyED(temp,key)).getBytes());
}

public String decrype(String text,String key)throws Exception{
BASE64Decoder decoder = new BASE64Decoder();
text=new String(decoder.decodeBuffer(text));
char[] cText=text.toCharArray();
char[] temp=new char[cText.length/2];
int ind=0;
cText=this.keyED(cText, key);
String tmp="";
for(int i=0;i<cText.length;i++){
char md5=cText[i];
i++;
temp[ind++]=(char)(cText[i]^md5);
}
return new String(temp);
}
}

3,delphi代码(只有加密代码,没写解密代码。有兴趣的可以给补上)

function Tfrmunmsgmain.EnPlugPwcrypt(str, skey: string): string;
//加密插件用的字符串
var
IdEncoder64: TIdEncoderMIME;
sencrypt_key, stemp, stemp1 : string;
ictr, i : Integer;
ifirst, ilast : Integer;

function enpwcrypt(str, skey: string): string;
//获取加密后的字符串
var
stemp, sencrypt_key : string;
ictr, i : Integer;
ifirst, ilast : Integer;
begin
try
result := '';
try
sencrypt_key := LowerCase(UMD5Crypt.UGetMd5Str(skey));
ictr := 1;
stemp := '';
for I := 1 to length(str) do
begin
if (ictr = length(sencrypt_key)) then
ictr := 1;
ifirst := Ord(midstr(str,i,1)[1]);
ilast := Ord(midstr(sencrypt_key,ictr,1)[1]);
stemp := stemp +
chr((ifirst) XOR (ilast));
inc(ictr);
end;
result := stemp;
except

end;
except

end;
//
end;

begin
try
result := '';
try
IdEncoder64 := TIdEncoderMIME.Create(Application);
sencrypt_key := LowerCase(UMD5Crypt.UGetMd5Str(inttostr((Random(100000)))));
ictr := 1;
stemp := '';
stemp1 := '';
for I := 1 to length(str) do
begin
if (ictr = length(sencrypt_key)) then
ictr := 1;
ifirst := Ord(midstr(str,i,1)[1]);
ilast := Ord(midstr(sencrypt_key,ictr,1)[1]);
stemp1 := midstr(sencrypt_key,ictr,1) +
chr((ifirst) XOR (ilast));
stemp := stemp + stemp1;
inc(ictr);
end;
result := IdEncoder64.Encode(enpwcrypt(stemp, skey))
finally
freeandnil(IdEncoder64);
end;
except

end;
end;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-04-19
不能解的,直接把加密字符串传过去在验证
第2个回答  2009-04-17
老大这怎么解?解不了的
相似回答