C#将字符串加密成数字,可逆解密,能实现不?

miss__zhang 2012-09-26 04:45:36
C#将字符串加密成数字,可逆解密,能实现不?
比如abc加密成123,字符串没有长度限制,但是必须把字符串加密成数字并且可逆,而且数据量非常大,还要考虑查询速度,各位大大们能帮帮我不?
...全文
1187 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
showjim 2012-09-27
  • 打赏
  • 举报
回复
if (A^B >= 无穷大)
pnwilson 2012-09-27
  • 打赏
  • 举报
回复
非常简单,标准的DES或其他加密法,变成二进制后,把二进制作为数字显示。
csdn_风中雪狼 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]
再贴一个我昨晚写的优化过的算法,效率有明显提升:

C# code
string s = File.ReadAllText(@"c:\C语言概念题解答选编.txt", Encoding.GetEncoding("gb2312"));
int key = 12345;
StringBuilder sb = new StringBuilder(……
[/Quote]
学习了
mwp 2012-09-27
  • 打赏
  • 举报
回复
定义密码本数组 book= {'a','b','c',..........},
把字符串逐个字符到密码本查找,并替换成数组下标,例如“abc”转成012,这个方法特点是:加密稍慢,解密很快。
dalmeeme 2012-09-27
  • 打赏
  • 举报
回复
不行,装不下,除非你的文本具有某种特征,能找到明显的冗余。
miss__zhang 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]

再贴一个我昨晚写的优化过的算法,效率有明显提升:
C# code
string s = File.ReadAllText(@"c:\C语言概念题解答选编.txt", Encoding.GetEncoding("gb2312"));
int key = 12345;
StringBuilder sb = new StringBuilder(5 *……
[/Quote]
不成为数字也可以,只要能够定长,比如不管多长的字符串,转换过来都是128位也可以,这样能实现不?
dalmeeme 2012-09-27
  • 打赏
  • 举报
回复
再贴一个我昨晚写的优化过的算法,效率有明显提升:
		string s = File.ReadAllText(@"c:\C语言概念题解答选编.txt", Encoding.GetEncoding("gb2312"));
int key = 12345;
StringBuilder sb = new StringBuilder(5 * s.Length);
foreach (char c in s)
sb.Append((c ^ key).ToString("D5"));
string r1 = sb.ToString();
Response.Write("加密后:" + r1 + "<br/>");
sb = new StringBuilder(r1.Length / 5);
for (int i = 0; i < r1.Length; i += 5)
{
int value = int.Parse(r1.Substring(i, 5)) ^ key;
sb.Append((char)value);
}
string r2 = sb.ToString();
Response.Write("解密后:" + r2);

测试100KB左右大小的文本文件,加密部分用时35毫秒、解密部分用时45毫秒。密钥为0~65535的整数。
dalmeeme 2012-09-27
  • 打赏
  • 举报
回复
定长不可能,18位数字包含的变化数不够,映射不了。
足球中国 2012-09-27
  • 打赏
  • 举报
回复
二战的时候计算机发明。
德国这么快的战败就是因为密码本让英国人得到了。

你可以建一个自己的密码本。

比如 “日本人”可以用 1表示。
再比如 “是狗”可以用 2表示。
“日本人是狗” 就可以用 12表示。
这样可以压缩数据。还可以根据根据密码本快速的查到日本人是狗。(不表示二战是用这个方法哦)
miss__zhang 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

C# code

class Program
{
static void Main(string[] args)
{
//默认密钥向量
string Vector = "123456";

var strSource = "abcsa";
……
[/Quote]

我测试下,还没完全消化到你的东西,我看一下,还是和同问12楼的问题,就是字符串没有定长,但是需要加密或者转换出来是一个定长的整数,这个有点头疼,我想分应该是给你和12楼的哥子了,分有点少,见谅了哈!
miss__zhang 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

我用简单的异或算法,密钥是123(必须是0~255之间的整数,但可以扩充成更大范围):
C# code
string s = "中国人和日本人。";
Response.Write("加密前:" + s + "<br/>");
StringBuilder sb = new StringBuilder();
byte[] bytes……
[/Quote]

哥子,谢谢了,还有个疑问,我想定长,就是不管多长的字符串,加密出来之后比如说都是18位数字能实现不呢?
qianainan 2012-09-27
  • 打赏
  • 举报
回复
就这个挺好的[Quote=引用 11 楼 的回复:]

C# code

class Program
{
static void Main(string[] args)
{
//默认密钥向量
string Vector = "123456";

var strSource = "abcsa";
……
[/Quote]
miss__zhang 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 的回复:]

不成为数字也可以,只要能够定长,比如不管多长的字符串,转换过来都是128位也可以,这样能实现不?

不可能。。。除非你不要解密,如果要解密 ,不可能的,听说 王小云教授搞定了sha1?
[/Quote]
分有点少别介意哈!
miss__zhang 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 的回复:]

不成为数字也可以,只要能够定长,比如不管多长的字符串,转换过来都是128位也可以,这样能实现不?

不可能。。。除非你不要解密,如果要解密 ,不可能的,听说 王小云教授搞定了sha1?
[/Quote]
学习了结贴了,非常感谢!
yonglaixiazaide 2012-09-27
  • 打赏
  • 举报
回复
不成为数字也可以,只要能够定长,比如不管多长的字符串,转换过来都是128位也可以,这样能实现不?

不可能。。。除非你不要解密,如果要解密 ,不可能的,听说 王小云教授搞定了sha1?
dalmeeme 2012-09-26
  • 打赏
  • 举报
回复
密钥范围为Unicode码取值范围0~65535。
dalmeeme 2012-09-26
  • 打赏
  • 举报
回复
改进了一下,更好些,密钥为12345:
		string s = "中国人和日本人。";
Response.Write("加密前:" + s + "<br/>");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.Length; i++)
sb.AppendFormat("{0:D5}", s[i] ^ 12345);
string r1 = sb.ToString();
Response.Write("加密后:" + r1 + "<br/>");
MatchCollection matches = Regex.Matches(r1, @"\d{5}");
sb = new StringBuilder();
for (int i = 0; i < matches.Count; i++)
sb.Append((char)(int.Parse(matches[i].Value) ^ 12345));
string r2 = sb.ToString();
Response.Write("解密后:" + r2);

加密前:中国人和日本人。
加密后:3227626308323872578121980222933238700059
解密后:中国人和日本人。
dalmeeme 2012-09-26
  • 打赏
  • 举报
回复
哦,其实#12楼给出的密钥也可以是更多位的,比如5位也是支持的。只要把D3改成D5、\d{3}改成\d{5}就行了。

cnwin 2012-09-26
  • 打赏
  • 举报
回复
可以实现的,自己写算法就可以了。迷惑解除了吧?可以动脑想想了。
IT-Style 2012-09-26
  • 打赏
  • 举报
回复
这个东西现成的没有,只能自己构造一个属于自己的算法来实现字符串加密成数字串.
加载更多回复(11)

110,538

社区成员

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

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

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