| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 456 人关注过本帖
标题:求简单的解密啊!小弟是初学者,求帮助
只看楼主 加入收藏
qq510422801
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2011-4-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
求简单的解密啊!小弟是初学者,求帮助
evdzcvi这几个字母是用以下方法加密码所得到的:
英文字母从A—Z分别对应0—25,先将明文转化为对应的数字,
C(密文)=k*对应的数字(mod26)
再将C转化成对应的字母就得到evdzcvi!
现在要解出明文与密钥K!
希望高手们帮帮小弟!教一下我解密的方法与程序,程序最好有解释!!谢谢!
搜索更多相关主题的帖子: 英文字母 密码 
2011-05-17 23:43
liubin697
Rank: 2
等 级:论坛游民
帖 子:33
专家分:10
注 册:2011-5-18
收藏
得分:0 
不知道你题目说的是什么
2011-05-18 00:53
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
最好举个例子,我看不懂你说什么
2011-05-18 06:38
其实、不想说
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:122
专家分:156
注 册:2011-3-3
收藏
得分:0 
不懂你说的是啥??
2011-05-18 09:24
qq510422801
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2011-4-8
收藏
得分:0 
回复 3楼 hjywyj
例子:密钥为(7,3),将teacher进行加密!
      t=19,e=4,a=0,c=2,h=7,e=4,r=17,(这一步就是将字母转化成对应该的数字!)
      E(19)=(19*7)mod 26 =3;
      E(4)=(4*7)mod 26 =2;
      E(0)=(0*7)mod 26 =0;
      E(2)=(19*7)mod 26 =14;
      E(7)=(19*7)mod 26 =23;
      E(4)=(19*7)mod 26 =2;
      E(17)=(19*7)mod 26 =15;
      (以上就是密的方法!)
      然后将数字再转为字母就得到密文为:
      dcaoxcp!

而我想问就是:现在有密文,我怎么可以求出明文和密钥呢?
(小弟表达能力差希望高手们不要介意!)
2011-05-18 12:37
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:20 
程序代码:
#include <stdio.h>

int main(void) {
    char Encryption[] = "evdzcvi";
    char Decryption[8];
    int temp[7];
    int i = 0, j, k, n, found = 0;
    while(Encryption[i]) {
        temp[i] = Encryption[i] - 'a';
        i++;
    }
    for(k = 2; ; k++) {
        n = 0;
        for(i = 0; i < 7; i++) {
            for(j = 0; j < 26; j++) {
                if(temp[i] == k * j % 26) {
                    Decryption[i] = j + 'a';
                    n++;
                    break;
                }
            }
        }
        if(n == 7) {
            found = 1;
            Decryption[8] = '\0';
            break;
        }
    }
    if(found) {
        printf("%s\n", Decryption);
        printf("k : %d\n", k);
    }
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册

用穷举法算出来的,k 应该满足 >= 2,逆推不能算出 (k * 对应的数字)的值。

My life is brilliant
2011-05-18 14:51
qq510422801
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2011-4-8
收藏
得分:0 
回复 6楼 lz1091914999
真很的很感谢谢你!
但我还是想问一下,我上课老师说这个解密的算法是M(明文)=(C*k的逆)mod 26,所以我写出了以下的程序,但是解不出来,可以帮我看看那里出问题了吗?
程序代码:
#include<stdio.h>
void decrypt(char m[],char c[],int k,int length)
{
    int i,mm,nn;
    for(i=0;i<length;i++)
    {
/*    第一步:将字母转换为Z26中的元素   */
        if((c[i]>='A')&&(c[i]<='Z'))
        {
            mm=c[i]-'A';
/*    第二步:加密    */
            nn = (mm/k)%26;
/*    第三步:将密文转换为字母   */
            m[i] = 'a'+nn;
        }
        else if((c[i]>='a')&&(c[i]<='z'))
        {
            mm=c[i]-'a';
/*    第二步:加密    */
            nn = (mm/k)%26;
/*    第三步:将密文转换为字母   */
            m[i] = 'a'+nn;
        }
        else
            m[i]=c[i];
    }
    return;
}

void main()
{
    char m[100];
    char c[100]="evdzcvi";
    int  k,j,i,length;

    length=7;
    for(j=0;j<26;j++)
    {
        decrypt(m,c,j,length);
        printf("密钥为%d:明文为:",j);
        for(i=0;i<length;i++)
            printf("%c",m[i]);
        printf("\n");
    }
    return;
}


[ 本帖最后由 qq510422801 于 2011-5-18 23:52 编辑 ]
2011-05-18 22:10
快速回复:求简单的解密啊!小弟是初学者,求帮助
数据加载中...
 
   



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

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