【发布时间】:2012-05-28 13:01:56
【问题描述】:
我的问题可能很愚蠢,但我在将 char 值转换为 int 并转换回来时遇到了麻烦。
问题是我正在尝试解密 Access DB 检索到的 char 值。
这是我的代码
char chrVal = 'M';
int intVal = (int)chrVal; // Output 77 'M'
// Now trying to encrypt using XOR
int encIntVal = intVal ^ 203; // Output 134 '†'
// Convert back
char correct = (char)(encIntVal ^ 203); // Output 'M' - CORRECT
char wrong = (char)('†' ^ 203); // Output WRONG value
事实是,当我使用加密 XOR 的 int 结果值时,我得到了正确的结果 ('M')。相反,当我使用 encrypt XOR 的 char 结果(这是我在数据库中拥有的)时,我得到了错误的结果(不可读的字符)。
我尝试使用不同的编码,但我不知道问题出在哪里。
有什么建议吗?
更新
我发现问题可能出在 ADO.NET OleDbDataReader 上,因为 (int)Convert.ToChar(dr["Sex"]) 给了我 8224 而不是 134,但我还找不到解决方案。
已解决
字符“†”在 Windows 1252 代码页中。所以我得到了一个编码正确的字节[]。
byte[] byteVal = Encoding.GetEncoding(1252).GetBytes(dr["Sex"])
char correct = (char)(byteVal[0] ^ 203); // Output 'M'
谢谢
【问题讨论】:
-
这不是密码学
-
@Jodrell - 可以肯定的是,这只是凯撒式的转变。
-
@Jodrell - 我不需要强加密,我只需要从 DB 中解密该值。
-
@Flea777,从好的方面来说,它会很快。你基本上已经正确了。
chrVal == correct所以你知道它是往返的,只需忽略byte134的显示方式。