哇哦~这就是我
This is my way ~
C++博客
首页
新随笔
联系
聚合
管理
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
统计
随笔 - 10
文章 - 0
评论 - 2
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
2008年5月 (2)
2008年4月 (3)
2008年3月 (5)
搜索
最新评论
1. re: C++第五次上机作业
你似乎还是不会使用批处理文件和命令行参数哟~~
--一个你的同学
2. re: 我可怜的第三次C++作业啊~~~只有70分~~~
可能是写的过程中有错,所以你要flash一下io或重设io的状态!
--梦在天涯
阅读排行榜
1. C++第四次上机作业(异或加密)(1378)
2. C++第五次上机作业(313)
3. 我恨死这道题了。。。。。。(292)
4. 详细解说 STL 排序(Sort) (288)
5. 我可怜的第三次C++作业啊~~~只有70分~~~(284)
评论排行榜
1. 我可怜的第三次C++作业啊~~~只有70分~~~(1)
2. C++第五次上机作业(1)
3. 第七次(0)
4. 11(0)
5. push!(0)
C++第四次上机作业(异或加密)
1
#include
<
iostream
>
2
#include
<
fstream
>
3
#include
<
cstring
>
4
#include
<
cctype
>
5
using namespace std;
6
const
int
MAXN
=
100000
;
7
int
main (
int
argc , char
*
args[] )
8
{
9
char p,code;
10
int
i
=
0
,l;
11
char key[MAXN];
12
if
( argc
<
2
)
13
while
( cin.get(p)
&&
!cin.eof() )
14
cout.put(p);
15
else
16
{
17
strcpy(key,args[
1
]);
18
l
=
strlen(key);
19
while
( cin.get(p)
&&
!cin.eof() )
20
{
21
if
( p
==
'
\n' )
22
cout
<<
'
\n';
23
else
24
{
25
code
=
p
^
key[i%l];
26
if
( isprint(code) )
27
cout
<<
code;
28
else
29
cout
<<
p;
30
}
31
i
++
;
32
}
33
}
34
}
上面这个代码
首先通过
main
函数的参数
*args[]
读入
key
,利用
(i++)%len
实现对
key
各个字符的循环操作。利用
cin.get( )
依次读入各个字符,并与
key
中的字符进行
异或运算,得到加密的字符。由于异或运算的可逆性,即
a==(a^b)^b ,
可以恢复得到原文。
在调试过程中发现,加密会得到一个
ASCII
码编号为
26
的字符,然后在解密的时候,若读入这个编码为
26
的字符,程序就会终止。所以第一个想法就是忽略所有非打印字符,在编码时,若所得密码为非打印字符,则不进行加密,输出原文。但是受到了老师的否认。于是再作修改,经实验发现,只有编码为
26
的字符会出现这种奇怪的情况,因此决定将这个字符定义成编码为
27
的字符,如
’u’^’o’
会产生
26
的字符,就把这个字符改成
27
,结果最后出现原来应该是
’o’
的,解密得到了
’n’
,但是没有其他更好的办法了,总会有点误差的嘛。
以下为修改后的代码
#include
<
iostream
>
#include
<
cstring
>
using namespace std;
const
int
MAXN
=
100000
;
int
main (
int
argc , char
*
args[] )
{
char p,code;
int
i
=
0
,l;
char key[MAXN];
if
( argc
<
2
)
while
( cin.get(p) )
cout.put(p);
else
{
strcpy(key,args[
1
]);
l
=
strlen(key);
while
( cin.get(p) )
{
code
=
p
^
key[i%l];
if
( code
==
26
)
code
=
27
;
cout
<<
code;
i
++
;
}
}
}
posted on 2008-03-27 12:35
chinaeli
阅读(1378)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理