源代码ASP
Function Encrypt(PlainStr, key)
Dim Char, KeyChar, NewStr
Dim Pos
Dim i , Side1 , Side2
Pos = 1
For i = 1 To Len(PlainStr)
Char = Mid(PlainStr, i, 1)
KeyChar = Mid(key, Pos, 1)
NewStr = NewStr & Chr(Asc(Char) Xor Asc(KeyChar))
If Pos = Len(key) Then Pos = 0
Pos = Pos + 1
Next
If Len(NewStr) Mod 2 = 0 Then
Side1 = StrReverse(Left(NewStr, (Len(NewStr) / 2)))
Side2 = StrReverse(Right(NewStr, (Len(NewStr) / 2)))
NewStr = Side1 & Side2
End If
Encrypt = NewStr
End Function目的代码C# public string Encode(string PlainStr, string Key)
{
string tmp = "";//结果
char[] dChar = PlainStr.ToCharArray();
char[] KeyChar = Key.ToCharArray();
int Pos = 0;
for (int i = 0; i < PlainStr.Length; i++)
{
char r = (char)(((int)dChar[i]) ^ ((int)KeyChar[Pos]));
tmp += r.ToString();
Pos++;
if (Pos == Key.Length) { Pos = 0; }
}
if (tmp.Length % 2 == 0)
{
string Side1 = Reverse(Left(tmp, (tmp.Length / 2)));
string Side2 = Reverse(Right(tmp, (tmp.Length / 2)));
tmp = Side1 + Side2;
}
return tmp;
}
现在C#代码可正确加密英文字符,但是中文字符加密就和ASP的有区别,问题应该在编码上,但屡试不爽。请高手赐教
Function Encrypt(PlainStr, key)
Dim Char, KeyChar, NewStr
Dim Pos
Dim i , Side1 , Side2
Pos = 1
For i = 1 To Len(PlainStr)
Char = Mid(PlainStr, i, 1)
KeyChar = Mid(key, Pos, 1)
NewStr = NewStr & Chr(Asc(Char) Xor Asc(KeyChar))
If Pos = Len(key) Then Pos = 0
Pos = Pos + 1
Next
If Len(NewStr) Mod 2 = 0 Then
Side1 = StrReverse(Left(NewStr, (Len(NewStr) / 2)))
Side2 = StrReverse(Right(NewStr, (Len(NewStr) / 2)))
NewStr = Side1 & Side2
End If
Encrypt = NewStr
End Function目的代码C# public string Encode(string PlainStr, string Key)
{
string tmp = "";//结果
char[] dChar = PlainStr.ToCharArray();
char[] KeyChar = Key.ToCharArray();
int Pos = 0;
for (int i = 0; i < PlainStr.Length; i++)
{
char r = (char)(((int)dChar[i]) ^ ((int)KeyChar[Pos]));
tmp += r.ToString();
Pos++;
if (Pos == Key.Length) { Pos = 0; }
}
if (tmp.Length % 2 == 0)
{
string Side1 = Reverse(Left(tmp, (tmp.Length / 2)));
string Side2 = Reverse(Right(tmp, (tmp.Length / 2)));
tmp = Side1 + Side2;
}
return tmp;
}
现在C#代码可正确加密英文字符,但是中文字符加密就和ASP的有区别,问题应该在编码上,但屡试不爽。请高手赐教
解决方案 »
- 【求助】C#多媒体邮件发送
- 想在程序中检测本地网络
- 大菜鸟求助!这个《System.Windows.Forms.ProgressBar prog》是什么意思啊?
- 怎样控制ComboBox中的元素不重复!(用DataSource动态加载的)
- 请 给看看,DEvExpress.tragrid中的数据源控件中显示数据时有问题(Gridview中的行,为什么会有意外的显示——没有文字显示?)
- 大家帮我解释解释mapobject的问题
- 救助大家时间和时间相减的问题 !!!
- Get || Post 请高手解答
- 散分(每人都有)!今天我未婚妻生日,祝福一下好吗
- [菜鸟问题]在windows应用程序中的数据库调用请教
- C#上传txt文件问题
- ThreadPool 问题
private static string Encode(string PlainStr, string Key)
{
string tmp = null;//结果
string dChar = null;
string KeyChar = null;
int Pos = 0;
for (int i = 0; i < PlainStr.Length; i++)
{
dChar = Mid(PlainStr, i, 1);
KeyChar = Mid(Key, Pos, 1);
tmp += Chr(Asc(dChar) ^ Asc(KeyChar));
Pos++;
if (Pos == Key.Length) { Pos = 0; }
}
if (tmp.Length % 2 == 0)
{
string Side1 = Reverse(Left(tmp, (tmp.Length / 2)));
string Side2 = Reverse(Right(tmp, (tmp.Length / 2)));
tmp = Side1 + Side2;
}
return tmp;
} private static string Reverse(string str)
{
char[] arr = new char[str.Length];
for (int i = 0; i < str.Length; i++)
arr[i] = str[str.Length - 1 - i];
return new string(arr);
} private static string Left(string str, int length)
{
return str.Substring(0, length);
} private static string Right(string str, int length)
{
return str.Substring(str.Length - length, length);
} private static string Mid(string str, int startIndex, int length)
{
return str.Substring(startIndex, length);
} private static int Asc(string ch)
{
return (int)Encoding.Default.GetBytes(ch)[0];
} private static Char Chr(int i)
{
return Convert.ToChar(i);
}
將Asc修正為
private static int Asc(string ch)
{
return (int)Encoding.Unicode.GetBytes(ch)[0];
}
看看符合您要的嗎?