Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > simple_encrypt.c
【标  题】:simple_encrypt.c
【关键字】:simple_encrypt.c
【来  源】:http://blog.csdn.net/hustbill/archive/2005/11/22/534606.aspx

simple_encrypt.c

Your Ad Here /*===============================================================
    Filename: simple_encrypt.c
    Author  : zhanghua
    Date    : 2005-11-22
    Fuction:  对原文进行加密并形成密码文,
    加密算法如下:
       假定原文为C1C2C3...Cn,加密后产生的密文为S1S2S3...Sn,
       首先读入正整数key(key>1)作为加密密钥,并将密文字符位置
       按顺时针方向连成一个环,
       加密时从S1位置起顺时针计数,当数到第KEY个字符位置时,将
       原文中的字符C1放入该密文字符位置中,同时从环中出去该字符位置。接着,
       从环中下一个字符位置起继续计数,当再次数到第key个字符位置时,将原文中的
       字符C2放入其中,并从环中下一个字符位置起继续计数,当再次数到第KEY个位置
       时,将原文中的字符C2放入其中,并从环中除去该字符位置,依次类推,
       直到n个原文字符全部放入密文环中。由此产生S1S2S3...Sn,即为原文的密文。
     相关知识: 结构体实现双向循环链表
     解题分析:
        将电码原文放在字符数组ocode中,加密钥匙放在key中,函数decode()
        用于将原文ocode加密并返回密文字符串的首指针,其中采用一个双向
        循环链表loop来表示密文环。
   -------------------------------------------------------------------*/
  
   #include <stdio.h>
   #include <string.h>
   #include <malloc.h>
  
    typedef struct node
    {
        char ch;
        struct node *forward; /*链接下一节点*/
        struct node *backward; /*链接前一节点*/
    } CODE;
   
    char *decode(char *ocode, int key)
    {
        char *ncode;
        int length, count,i;
        CODE *loop , *p;
        length = strlen(ocode);
        loop= (CODE*)malloc(length*sizeof(CODE)); /*动态分配密文环*/
        for(i=0;i<length-1;i++)
        {
            loop[i].forward = &loop[i+1];
            loop[i].backward =&loop[i-1];
           
        }    
        loop[0].backward =&loop[length-1];
        loop[0].forward = &loop[1];
        loop[length-1].forward = loop;
        loop[length-1].backward = &loop[length-2];
       
        for(p=loop, i=0; i<length;i++)
        {
            /*产生密文链表*/
            for(count=1;count<key; count++)
             p= p->forward;
             p->ch =*ocode++;
             p->backward->forward =p->forward;
             p->forward->backward = p->backward;
             p = p->forward;
         }
         ncode = (char*)malloc((length+1)*sizeof(char));
         for(i=0;i<length;i++)
        
             ncode[i] =loop[i].ch;
             ncode[length] = '\0';
             return ncode;
   }        
  
    main()
    {
        char ocode[256];
        int key, num=0;
        printf("输入加密电文: ");
        while(num<255&&(ocode[num++]=getchar())!='\n');
        ocode[(num==255)?num:num-1] ='\0';
        do
         {
             printf("输入加密密钥:");
             scanf("%d",&key);
             
         }   while(key<=1);
         printf("电文的密码是: '%s'\n",decode(ocode,key)); 
     
    }   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
Boost.Python学习笔记:【上一篇】
C++ Coding Standards ---- Item1 : Compile cleanly at high warning levels.:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • Linux资源无忧
  • 一个趣味的看图软件及代码
  • Director MX 2004教程--Director的工作界面
  • 设计模式------简单工厂模式
  • 用Flash制作简单的飞鸟动画
  • FreeBSD Port Tree 介绍
  • 用TreeView浏览目录
  • 自己动手写操作系统 实模式转换到保护模式
  • tcpdump做的IDS
  • 我郁闷了,rookit的开发停止了
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.