| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2876 人关注过本帖
标题:加密函数
只看楼主 加入收藏
不落夕阳
Rank: 2
等 级:论坛游民
帖 子:64
专家分:30
注 册:2016-10-13
结帖率:69.57%
收藏
已结贴  问题点数:20 回复次数:7 
加密函数
问题描述:
  一个文本串可用事先给定的字母映射表进行加密。例如,设字母映射表为:
     a b c d e f g h i j k l m n o p q r s t u v w x y z
     n g z q t c o b m u h e l k p d a w x f y i v r s j
则字符串“encrypt”被加密为”tkzwsdf”。试写一个算法将输入的文本串进行加密后输出,并可将输入的已加密的文本串进行解密后输出。
提示:字母映射表可以用两个串A,B来存放(由串常量创建串);
       加密函数;解密函数;显示函数;
搜索更多相关主题的帖子: 字符串 加密 字母 
2016-10-27 21:00
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10570
专家分:43038
注 册:2014-5-20
收藏
得分:0 
字典
2016-10-27 21:39
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:0 
貌似只能用if或switch一个字符一个字符的判断了
2016-10-27 22:43
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:5 
#include<stdio.h>
const char *dict = "abcdefghijklmnopqrstuvwxyz";
const char *map =  "ngzqtcobmuhelkpdawxfyivrsj";

void encrypt(char *src){
    if(!src)
        return;
    while(*src!='\0'){
        *src=map[*src-'a'];
            src++;
    }
}

int findIndex(char s){
    int i=0;
    while(s!=map[i])i++;
    return i;
}

void decryption(char *src){
    if(!src)
        return;
    while(*src!='\0'){
        int index = findIndex(*src);
            *src = dict[index];
            src++;
    }
}

int main()
{
    char src[100];
    gets(src);
    encrypt(src);
    puts(src);

    decryption(src);
    puts(src);
    return 0;
}
2016-10-27 22:57
cozy250
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-10-26
收藏
得分:0 
C语言新手。
非常感谢word123同学的解答,学习了。
2016-10-28 09:07
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:5 
回复 4楼 word123
解密也应该直接map
加密map = "ngzq……"
解密map = "qhfp……"
2016-10-28 09:36
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:5 
可以只需要一个密文字典常量,明文是顺序asc码,计算即可,无需置常量字符串,代码如下:
程序代码:
#include<stdio.h>
char *map="ngzqtcobmuhelkpdawxfyivrsj";
void encrypt(char *s)
{
    int i,j;
    for(i=0;s[i];i++)
    {
        j=s[i]-'a';
        if(j>=0&&j<26)s[i]=map[j];
    }
}
void decrypt(char *s)
{
    int i,j;
    for(i=0;s[i];i++)
    {
        for(j=0;map[j]&&s[i]!=map[j];j++);
        if(map[j])s[i]=j+'a';
    }
}

void main()
{
    char a[]="Encrypt and Decrypt";
    printf("原文:%s\n",a);
    encrypt(a);
    printf("密文:%s\n",a);
    decrypt(a);
    printf("解密:%s\n",a);
}
2016-10-28 09:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:5 
回复 7楼 xzlxzlxzl
程序代码:
#include <stdio.h>

void encrypt( char* s )
{
    for( char* p=s; *p; ++p )
        if( *p>='a' && *p<='z' )
            *p = "ngzqtcobmuhelkpdawxfyivrsj"[*p-'a'];
}

void decrypt( char* s )
{
    for( char* p=s; *p; ++p )
        if( *p>='a' && *p<='z' )
            *p = "qhfpltbkvznmiagodxyejwrsuc"[*p-'a'];
}

int main( void )
{
    char a[] = "Encrypt and Decrypt";
    printf( "原文:%s\n", a );

    encrypt( a );
    printf( "密文:%s\n", a );

    decrypt( a );
    printf( "解密:%s\n", a );

    return 0;
}
2016-10-28 10:06
快速回复:加密函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015613 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved