环境说明:
服务器端是redhat5+sybase15ase
sybase 用的字符集是sybase默认的iso_1字符集 代码页为28591
客户端以前是用pb7开发的,
现在用.net 开发客户端
问题说明:
现在有个密码字段,是经过的加密的,加密算法比较简单,把字符转为ascii码,然后用255-ascii码,再转为字符,把各字符相加存入字段中
比如,密码为666666 ,存入后,用pb或vs select 出来后为 噬噬噬
现在我想把噬噬噬反算为666666
问怎么写
服务器端是redhat5+sybase15ase
sybase 用的字符集是sybase默认的iso_1字符集 代码页为28591
客户端以前是用pb7开发的,
现在用.net 开发客户端
问题说明:
现在有个密码字段,是经过的加密的,加密算法比较简单,把字符转为ascii码,然后用255-ascii码,再转为字符,把各字符相加存入字段中
比如,密码为666666 ,存入后,用pb或vs select 出来后为 噬噬噬
现在我想把噬噬噬反算为666666
问怎么写
解决方案 »
- SqlHelper并不包含“ConnectionString”的定义
- ASP.NET入门
- 急!关于windows API imm32.dll 中的ImmEnumRegisterWord 函数的使用。
- C# combox 控件 中的这个功能 如何实现
- 一个c#中连接oracle9i数据库的菜鸟问题
- C# dataGridview 导出exlex格式问题
- C# COM的问题
- 求助呀!DataReader
- 请给予指导!
- 如何实现线程的暂停与resume?
- 如何让TABCONTRL 不同TABPAGE的radiobutton化为一组
- 怎么替换devExpress 的ribbon控件左上角的工具菜单的图标"dx"
string unicodeString = "噬噬噬";
Encoding unicode = Encoding.Unicode;
Encoding iso_1 = Encoding.GetEncoding(28591);
byte[] unicodeBytes = unicode.GetBytes(unicodeString);
ok.Text = iso_1 .GetString( unicodeBytes ,0,unicodeBytes .Length);//显示在一个按钮上看看
那么解密算法在哪写?
[0x00000000] 0xca byte
[0x00000001] 0xc9 byte
[0x00000002] 0xca byte
[0x00000003] 0xc9 byte
[0x00000004] 0xca byte
[0x00000005] 0xc9 byte
看上去不太可能和66666扯上关系。用pb或vs select 出来后为 噬噬噬select是什么?你是说从数据库里读出来的是错的?还是pb的某个dll导出的方法是这样?
string unicodeString = "噬噬噬";
这里"噬噬噬"已经是Encoding.Default下的字符串了。要测试也该用原始的byte[]来测试。
出来的结果就是"噬噬噬"
我该怎么办呢?
-----------------------------------------
不懂数据库相关的
返回的是个DataTable,
string s = dt.Rows[0][0].ToString();
用这个s做测试
不过和c#,pb应该没关系吧。sbase的数据库的话,看看如何读写的,有没有加密,字符集设置之类的。
先取一个字符 也就是6 转为ascii码为54 ,然后255-54=201
ascii码为201的字符为É 然后再取下一个字符,
这样就把ÉÉÉÉÉÉ存入数据库中,用select pwd where emp where empid='0210'取出来后显示的为"噬噬噬"
现在怎样才能将"噬噬噬" 转为666666
{
string str = "缮缮缮";
byte[] bytes = Encoding.Default.GetBytes(str);
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] = (byte)(255 - bytes[i]);
}
string s = Encoding.GetEncoding(28591).GetString(bytes);
Console.WriteLine(s);
}按你说的方法转换也无法得到你说的三个字符。我顺着转,转出来是 缮缮缮 ,如果逆转,这样就可以了。