字符转换问题,高手请进,急救!!!!!!!!!!!

lanren 2001-11-02 09:05:47
function EncryptStr(SourceStr: string): string;
var
StrLen: Integer;
TempStr: string;
TempStr1: string;
i: Integer;
Byte1: Byte;
begin
TempStr := '';
TempStr1 := '01';
StrLen := Length(SourceStr);
for i := 1 to StrLen do
begin
Byte1 := Ord(SourceStr[i]) + 120;
TempStr1[1] := Chr(Byte1);
TempStr1[2] := Chr(Byte1 + 7);
TempStr := TempStr + TempStr1;
end;
EncryptStr := TempStr;
end;

如何做一个与之完全等效的java方法,由于java用的是unicode,急救!!!!!!!!!! ,给源码!!!!!!!!!!
...全文
152 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanren 2001-11-03
  • 打赏
  • 举报
回复
帮忙
lanren 2001-11-03
  • 打赏
  • 举报
回复
是这样的,我有一个以前用dephi开发的应用系统,有一个密码验证过程,其中的密码是用上述的dephi函数加密保存在数据库中的,现在要在一个servlet中对实现这个验证过程,用的还是以前的数据,我从页面得到用户输入的密码明文,想用一个java方法(在javaBean中)加密后与从数据库中取得的密码(经dephi函数加密的)进行比较实现验证过程,现在的问题是如何用一个相同的密码明文,经java方法运算得到与原数据库中取得的密文完全相同,主要是汉字编码问题,



例如,明文'hljdkh'用上述dephi函数运算得到的密文是'噻潆忾茔汴噻'

现在的问题是要用java实现一个方法,输入'hljdkh',得到输出'噻潆忾茔汴噻'
'
titansavent 2001-11-03
  • 打赏
  • 举报
回复
不懂,你想问什么?是想把int 付给 string 么,
若是如此, 可以用, String a = String.valueOF(i) + "" 试一下,应给没问题
lanren 2001-11-03
  • 打赏
  • 举报
回复
to ChDw(米) 
我的QQ是:1344293
留下你的QQ,交个朋友好吗???以后多请教
lanren 2001-11-03
  • 打赏
  • 举报
回复
是不是new String的时候进行这种转换的?
ChDw 2001-11-03
  • 打赏
  • 举报
回复
ch[0]ch[1]放在一起之后得到的字符并不是a2<<8¦a2,
java会通过一个算法把ch[0],ch[1]算出Unicode直=0x567B
lanren 2001-11-03
  • 打赏
  • 举报
回复
它的算法与我的应该是一样的,ch[0]ch[1]放在一起与a2<<8|a2不是一样的结果吗,难道在
new String()内码发生了变化,小弟愚味!!!!
lanren 2001-11-03
  • 打赏
  • 举报
回复
那你的代码为什么会得到“噻”字符??????????
ChDw 2001-11-03
  • 打赏
  • 举报
回复
第一个循环内a1=0xe0e7,在delphi中由于使用GB2312编码所以a1代表了“噻”字符
但是在java里面,0xe0e7由于使用Unicode,所以根本不是“噻”字符
lanren 2001-11-03
  • 打赏
  • 举报
回复
可是从数据库中取得的字符不也是用unicode表示的吗;在dephi中的密文'噻潆忾茔汴噻'与java中从数据库取得的密文的内码表示为什么会相同,在dephi中汉字的内码是GB2312,在java是的内码是unicode,它们为什么会相同?????

还有a1的十六进制值是不是在(char)a1的时候发生了变化?????????


ChDw 2001-11-03
  • 打赏
  • 举报
回复
因为在java里面,中文字符的存储使用的是Unicode,所以你算出来的a1并不是一个GB2312下
的字符,
lanren 2001-11-03
  • 打赏
  • 举报
回复
楼上的高人,多谢了,请帮我看一个这段代码为什么不对,马上给分

public String encrypt(String source)
{
byte bt ;
StringBuffer temp=new StringBuffer();
int a1,a2;//asci码值
int strLen=source.length();
//source=new String(source.getBytes("ISO8859-1"));
for(int i=0;i<strLen;i++)
{
a1=(int)source.charAt(i)+120;
a2=a1+7;
a1=(a1<<8)|a2;
temp.append((char)a1);
}
return temp.toString();
ChDw 2001-11-03
  • 打赏
  • 举报
回复
public static String encode(String src)
{
byte[] ch = src.getBytes();
byte[] result = new byte[ch.length * 2];
for(int i = 0; i < ch.length; i++) {
result[i*2] = (byte)(ch[i]+120);
result[i*2 + 1] = (byte)(ch[i]+127);
}
return new String(result);
}
lanren 2001-11-02
  • 打赏
  • 举报
回复
完全一样的输入,完全一样的输入出
lanren 2001-11-02
  • 打赏
  • 举报
回复
高人救命
lanren 2001-11-02
  • 打赏
  • 举报
回复
高人救命

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧