哇哦~这就是我

This is my way ~
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

  • 随笔 - 10
  • 文章 - 0
  • 评论 - 2
  • 引用 - 0

常用链接

留言簿(1)

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

C++第四次上机作业(异或加密)

上面这个代码首先通过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)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理