麻烦帮忙转换一下加密解密的函数

lenchowong 2010-05-12 01:27:01
因和别人一起做一个系统,他用的是DELPHI。
结果在用户那里做了一个加密函数
而我实现的却是用ASP.NET c# 来做
我本身也很菜,所以根本不知道该怎么去转换这个函数


const
XorKey: array[0..7] of Byte = ($B2, $09, $AA, $55, $93, $6D, $84, $47); //字符串加密用

function Enc(Str: string): string; //字符加密函數 這是用的一個異或加密
var
i, j: Integer;
begin
Str := Trim(Str);
Result := '';
j := 0;
for i := 1 to Length(Str) do
begin
Result := Result + IntToHex(Byte(Str[i]) xor XorKey[j], 2);
j := (j + 1) mod 8;
end;
end;

function Dec(Str: string): string; //字符解密函數
var
i, j: Integer;
begin
Result := '';
j := 0;
for i := 1 to Length(Str) div 2 do
begin
Result := Result + Char(StrToInt('$' + Copy(Str, i * 2 - 1, 2)) xor XorKey[j]);
j := (j + 1) mod 8;
end;
end;


麻烦帮忙能转成c#的函数吗?
万分感谢?
...全文
148 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
科全 2012-02-19
  • 打赏
  • 举报
回复
有结果了吗?给我一份吧.我也需要这个问题的回答,谢谢!
lenchowong 2010-05-13
  • 打赏
  • 举报
回复
顶一下。达人们帮一下小弟啦。谢谢
lenchowong 2010-05-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wuyq11 的回复:]
asp.net中加密解密方法很多如 des,sha,rsa
[/Quote]
因为他做的比我早
只能是我去迎合之前的系统
所以只能去实现他的加密
wuyq11 2010-05-12
  • 打赏
  • 举报
回复
asp.net中加密解密方法很多如 des,sha,rsa
lenchowong 2010-05-12
  • 打赏
  • 举报
回复
用DELPHI得出的转换结果

123 ===== 833B99
123456 === 833B9961A65B
chengxu === D161CF3BF415F1
刘德华 === 73FC1F9728C7
lenchowong 2010-05-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mngzilin 的回复:]
C# code
public byte[] ConvertHexToBytes(string _HexText)
{
byte[] _ImageBytes = new byte[_HexText.Length / 2];

for (int i = 0; i != _ImageBytes.Length; i+……
[/Quote]

您好,根据您的这个,得出的结果也是不一样的。
以下这个是我以前写的。。。中文字符是乱码。
英文的在16进制的转换上没有问题,但是和那个DELPHI的加密结果是出入的
我个人觉得可能是在数据的匹配上。
但是我水平太菜了。
搞不清楚那个XOR异或运算。。。
所以得出的结果老是错误。
麻烦您这边帮忙看看好吗

#region 把16进制字符串转换成普通字符串

private string HexStrToStr(string text)
{
string result = "";
byte[] bytes = new byte[text.Length / 2];
int i = 0, r = 0;
while (i < text.Length)
{
bytes[r] = byte.Parse(text.Substring(i, 2), System.Globalization.NumberStyles.HexNumber);
i += 2;
r++;
}
result = Encoding.GetEncoding("GB2312").GetString(bytes);
return result;
}

#endregion

#region 把字符串转换成16进制字符串

private string ChangeStrToHex(string text)
{
string result = string.Empty;
char[] chars = text.ToCharArray();
if (chars != null)
{
foreach (char c in chars)
{
int letter = Convert.ToInt32(c);
result += String.Format("{0:X}", letter);
}
}
return result;
}

#endregion
lenchowong 2010-05-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lon123 的回复:]
解密部分还有问题,大家帮忙改把。。。。。
ps:不小心发到另一个贴子去了。。。
public string Enc(string s)
{
string str = s.Trim();
string Result = "";
int j = 0;

for (int i = 1; i < str.Length; i++)
{
Result += s……
[/Quote]

您好,将您的这个用来测试,得出的结果还是不一样。
比如。123加密后是 “833B99”
另外,如果加密的字符串是中文的话。解密出来时乱码。

原程序定义了一个数组。const
XorKey: array[0..7] of Byte = ($B2, $09, $AA, $55, $93, $6D, $84, $47); //字符串加密用

然后IntToHex(Byte(Str[i]) xor XorKey[j], 2);
用INTTOHEX 转换后又 xor XorKey[j], 2);应该是异或运算什么。
反正这个就是我不懂的啦。
而且中文字符串好想也有问题。
麻烦您能帮忙看看吗?
lon123 2010-05-12
  • 打赏
  • 举报
回复
解密部分还有问题,大家帮忙改把。。。。。
ps:不小心发到另一个贴子去了。。。
public string Enc(string s)
{
string str = s.Trim();
string Result = "";
int j = 0;

for (int i = 1; i < str.Length; i++)
{
Result += str[i] ^ j;
j = (j + 1) % 8;
}
return Result;
}

public string Dec(string s)
{
string str = s.Trim();
string Result = "";
int j = 0;

for (int i = 1; i < str.Length / 2; i++)
{
Result += Convert.ToChar('$' + (str.ToCharArray(i * 2 - 1, 2)[0] ^ j));
j = (j + 1) % 8;
}
return Result;
}
mngzilin 2010-05-12
  • 打赏
  • 举报
回复
        public byte[] ConvertHexToBytes(string _HexText)
{
byte[] _ImageBytes = new byte[_HexText.Length / 2];

for (int i = 0; i != _ImageBytes.Length; i++)
{
_ImageBytes[i] = Convert.ToByte(_HexText.Substring(i * 2, 2), 16);
}
return _ImageBytes;
}
public string ConvertBytesToHex(byte[] bytes)
{
string ret="";
foreach(byte bt in bytes)
{
ret+=bt.ToString("x2");
}
return ret;
}
mngzilin 2010-05-12
  • 打赏
  • 举报
回复
加密、解密都有了,呵呵
mngzilin 2010-05-12
  • 打赏
  • 举报
回复
这个帖子是专门回答你问题的,找的很费劲
http://topic.csdn.net/u/20100510/11/5288a054-1fcb-410d-ba9d-ad8575e64180.html
lenchowong 2010-05-12
  • 打赏
  • 举报
回复
我要是会的话早写了。呵呵:)
换的话也不行,因为他的系统也在用着。
inttohex是一个转换为16进制函数。
我水平比较差。写了一个转换函数。
结果发现得出的值和他的不一样
然后加入有中文字符。结果也完全不一样
所以求助各位达人


达人们帮忙一下。写出后立马结题
njw1028 2010-05-12
  • 打赏
  • 举报
回复
貌似,加密就是在字符串中加“$09”,解密,就是把字符串中“$”和后面的2个字符给搞掉
缭绕飘渺 2010-05-12
  • 打赏
  • 举报
回复
自己问下他们那个函数的意思
自己写个不就完了吗
要不就研究下Delphi
看懂了自己写
q107770540 2010-05-12
  • 打赏
  • 举报
回复


你不会换一个加密算法?

将系统中的加密解密处都换成你自己的

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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