‘壹’ 密码学部分 数据加密标准(DES)相关知识来回答,越详细约好
额……我该说啥呢……
首先给你一个网址看看:http://kweenzy.blog.51cto.com/1093584/1008506
嘛……这个就是我本人的博客,所以不算抄袭哈……
1、见链接中【轮结构】下面的图,每一个方框的右下角都写了诸如“56bit”的字样(1bit就是1位)……
2、见整个文章的中部位置红色字体“密钥的处理流程……”下面所述……
3、和4、……请参见原文然后想一下该怎么回答……不过S盒的工作原理是啥我还真不知道……
5、DES的安全弱点啊……最显而易见的是有弱密钥,但是数量很少,在每次产生子密钥的时候稍微做一下检查就可以解决这个问题,貌似也说不上什么弱点?以及,S盒是整个运算里唯一的一个非线性运算,其他的都是线性运算,线性运算就表示可以进行反推,所以S盒的安全性非常重要!但是S盒是完全公开的啊……更神奇的是研究了半天发现了一些S盒的规律但是根据发现出来的规律编程重新生成S盒的话,安全性没有这个S盒高!另外,其实整个DES的加密过程经过了NSA(美国国家安全局)的修改,他们还拒绝提供为什么修改的信息,所以很多人担心其实NSA可以分分钟破解DES……其他的安全弱点……记不清了……回头找资料来补充回答哈……
6、我靠不会描述!……骚年你自己加油看完资料再思考怎么进行数学描述……
7、密钥的使用顺序是相反的……【其实好像密钥进行左循环移位时,加密密钥第一轮移位是1位,解密密钥第一轮是0位……
8、骚年你自己加油画出示意图……【EDE就是先加密再解密再加密,3就是使用三个不同的密钥K1K2K3……
‘贰’ 什么是公钥加密
什么是公钥加密
公钥加密,也叫非对称(密钥)加密(public key encryption),属于通信科技下的网络安全二级学科,指的是由对应的一对唯一性密钥(即公开密钥和私有密钥)组成的加密方法。它解决了密钥的发布和管理问题,是目前商业密码的核心。在公钥加密体制中,没有公开的是明文,公开的是密文,公钥,算法。
常见算法
RSA、ElGamal、背包算法、Rabin(Rabin的加密法可以说是RSA方法的特例)、Diffie-Hellman (D-H) 密钥交换协议中的公钥加密算法、Elliptic Curve Cryptography(ECC,椭圆曲线加密算法)。使用最广泛的是RSA算法(由发明者Rivest、Shmir和Adleman姓氏首字母缩写而来)是着名的公开金钥加密算法,ElGamal是另一种常用的非对称加密算法。
缘起
该思想最早由雷夫·莫寇(Ralph C. Merkle)在1974年提出,之后在1976年。狄菲(Whitfield Diffie)与赫尔曼(Martin Hellman)两位学者以单向函数与单向暗门函数为基础,为发讯与收讯的两方创建金钥。
非对称
是指一对加密密钥与解密密钥,这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥。
如果加密密钥是公开的,这用于客户给私钥所有者上传加密的数据,这被称作为公开密钥加密(狭义)。例如,网络银行的客户发给银行网站的账户操作的加密数据。
如果解密密钥是公开的,用私钥加密的信息,可以用公钥对其解密,用于客户验证持有私钥一方发布的数据或文件是完整准确的,接收者由此可知这条信息确实来自于拥有私钥的某人,这被称作数字签名,公钥的形式就是数字证书。例如,从网上下载的安装程序,一般都带有程序制作者的数字签名,可以证明该程序的确是该作者(公司)发布的而不是第三方伪造的且未被篡改过(身份认证/验证)。
‘叁’ 什么是古典加密算法
古典加密算法分为替代算法和置换移位法。
1、替代算法
替代算法用明文的字母由其他字母或数字或符号所代替。最着名的替代算法是恺撒密码。凯撒密码的原理很简单,其实就是单字母替换。
例子:
明文:abcdefghijklmnopq
密文:defghijklmnopqrst
2、置换移位法
使用置换移位法的最着名的一种密码称为维吉尼亚密码。它以置换移位为基础的周期替换密码。
在维吉尼亚密码中,加密密钥是一个可被任意指定的字符串。加密密钥字符依次逐个作用于明文信息字符。明文信息长度往往会大于密钥字符串长度,而明文的每一个字符都需要有一个对应的密钥字符,因此密钥就需要不断循环,直至明文每一个字符都对应一个密钥字符。
其他常见的加密算法
1、DES算法是密码体制中的对称密码体制,把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位。
2、3DES是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高。
3、RC2和RC4是对称算法,用变长密钥对大量数据进行加密,比DES快。
4、IDEA算法是在DES算法的基础上发展出来的,是作为迭代的分组密码实现的,使用128位的密钥和8个循环。
5、RSA是由RSA公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,非对称算法。
6、DSA,即数字签名算法,是一种标准的 DSS(数字签名标准),严格来说不算加密算法。
7、AES是高级加密标准对称算法,是下一代的加密算法标准,速度快,安全级别高,在21世纪AES 标准的一个实现是 Rijndael算法。
‘肆’ 密钥是什么,什么是加密算法
1密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥.
2数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。
每次发数据给对方的时候都会用自己的私钥加密,私钥和公钥是对应匹配的,公钥是公开大家知道的,私钥是自己的,相当于我们的签名别人盗版不了。对方收到数据之后用公钥解密就能得到数据。再用公钥和私钥设计具体的办法就能处理好让别人不能窥探数据 。
‘伍’ 加密指什么意思
加密之所以安全,绝非因不知道加密解密算法方法,而是加密的密钥是绝对的隐藏,现在流行的RSA和AES加密算法都是完全公开的,一方取得已加密的数据,就算知道加密算法也好,若没有加密的密钥,也不能打开被加密保护的信息。单单隐蔽加密算法以保护信息,在学界和业界已有相当讨论,一般认为是不够安全的。公开的加密算法是给黑客和加密家长年累月攻击测试,对比隐蔽的加密算法要安全得多。
在密码学中,加密是将明文信息隐匿起来,使之在缺少特殊信息时不可读。虽然加密作为通信保密的手段已经存在了几个世纪,但是,只有那些对安全要求特别高的组织和个人才会使用它。在20世纪70年代中期,强加密(Strong Encryption) 的使用开始从政府保密机构延伸至公共领域, 并且目 前已经成为保护许多广泛使用系统的方法,比如因特网电子商务、手机网络和银行自动取款机等。
加密可以用于保证安全性, 但是其它一些技术在保障通信安全方面仍然是必须的,尤其是关于数据完整性和信息验证;例如,信息验证码(MAC)或者数字签名。另一方面的考虑是为了应付流量分析。
加密或软件编码隐匿(Code Obfuscation)同时也在软件版权保护中用于对付反向工程,未授权的程序分析,破解和软件盗版及数位内容的数位版权管理 (DRM)等。
尽管加密或为了安全目的对信息解码这个概念十分简单,但在这里仍需对其进行解释。数据加密的基本过程包括对称为明文的原来可读信息进行翻译,译成称为密文或密码的代码形式。该过程的逆过程为解密,即将该编码信息转化为其原来的形式的过程。
‘陆’ 给出一种答卷编号加密解密的数学公式方法
有个很简单的方法
就是比如编号是18,加密后就是1118(意义为一个1,一个8)
再比如332,加密后就是2312(也就是指两个3,一个2)
还原也很简单
比如2413还原后就是编号443
‘柒’ 什么叫加密技术
以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信号,但因不知解密的方法,仍然无法了解信息的内容。
加密建立在对信息进行数学编码和解码的基础上。加密类型分为两种,对称加密与非对称加密,对称加密双方采用共同密钥,(当然这个密钥是需要对外保密的),这里讲一下非对称加密,这种加密方式存在两个密钥,密钥 -- 一种是公共密钥(正如其名,这是一个可以公开的密钥值),一种是私人密钥(对外保密)。 您发送信息给我们时,使用公共密钥加密信息。 一旦我们收到您的加密信息,我们则使用私人密钥破译信息密码(被我们的公钥加密的信息,只有我们的唯一的私钥可以解密,这样,就在技术上保证了这封信只有我们才能解读——因为别人没有我们的私钥)。 使用私人密钥加密的信息只能使用公共密钥解密(这一功能应用与数字签名领域,我的私钥加密的数据,只有我的公钥可以解读,具体内容参考数字签名的信息)反之亦然,以确保您的信息安全。
举例如下:
代码如下:
/* Secure.c
Copyright (c) 2002, 2006 by ctu_85
All Rights Reserved.
*/
#include "stdio.h"
#include "string.h"
#define right 5
void Create();
void Load();
char secure(char);
char desecure(char);
void main()
{
int choice;
printf("Please enter your choice:\n");
printf("0:To quit;\n");
printf("1:To create a security file;\n");
printf("2:To load a security file .\n");
cir:
printf("Your choice:");
scanf("%d",&choice);
if(choice==0)
return;
if(choice==1)
{
Create();
printf("\n");
goto cir;
}
else
if(choice==2)
{
Load();
printf("\n");
goto cir;
}
else
{
printf("Invalid input!\n");
goto cir;
}
}
void Create()
{
FILE *fp;
char *p,ch,*s;
recre:
printf("Please enter the path where you wanna the file to be:");
scanf("%s",p);
if(*p<'C'||*p>'F'||*(p+1)!=':'||*(p+2)!=92||strlen(p)>30||strlen(p)<4)
{
printf("Invalid input!\n");
goto recre;
}
if((fp=fopen(p,"wb"))==NULL)
{
printf("Error!");
return;
}
an:
printf("Please set the password:");
scanf("%s",s);
if(strlen(s)>16||strlen(s)<6)
{
printf("The password is too long or too short,please reinput!\n");
goto an;
}
while(*s!='')
{
ch=*s;
ch=secure(ch);
s++;
fputc(ch,fp);
}
ch='\n';
ch=secure(ch);
fputc(ch,fp);
printf("Please enter the information,end with char '#':");
ch=getchar();
ch=getchar();
while(ch!='#')
{
ch=secure(ch);
fputc(ch,fp);
ch=getchar();
}
ch=secure(ch);
fputc(ch,fp);
fclose(fp);
}
void Load()
{
FILE *fp;
char *p,ch,*s,temp[18],pass[18],sign=secure('\n');
int i=0,t=0,lenth=0;
rece:
printf("Please enter the path where you wanna to load:");
scanf("%s",p);
if(*p<'C'||*p>'F'||*(p+1)!=':'||*(p+2)!=92||strlen(p)>30||strlen(p)<4)
{
printf("Invalid input!\n");
goto rece;
}
if((fp=fopen(p,"rb"))==NULL)
{
printf("Error!");
return;
}
ant:
printf("Please input the password:");
scanf("%s",s);
lenth=strlen(s);
if(lenth>16||lenth<6)
{
printf("The password is obviously incorrect!\n");
goto ant;
}
while(*s!='')
{
temp=secure(*s);
s++;
i++;
}
temp='';
ch=fgetc(fp);
while(ch!=sign)
{
pass[t]=ch;
t++;
ch=fgetc(fp);
}
pass[t]='';
ch=desecure(ch);
if(!strcmp(temp,pass))
{
while(ch!='#')
{
ch=fgetc(fp);
ch=desecure(ch);
if(ch!='#')
putchar(ch);
}
}
else
printf("The password is incorrect!\n");
fclose(fp);
}
char secure(char c)
{
if(c+right>254)
return c-255+right;
else
return c+right;
}
char desecure(char c)
{
if(c<right)
return 255-right;
else
return c-right;
}
‘捌’ 什么是对称加密什么是非对称加密
对称加密
在对称加密(或叫单密钥加密)中,只有一个密钥用来加密和解密信息。尽管单密钥加密是一个简单的过程,但是双方都必须完全的相信对方,并都持有这个密钥的备份。但要达到这种信任的级别并不是想象中的那么简单。当双方试图建立信任关系时可能一个安全破坏已经发生了。首先密钥的传输就是一个重要问题,如果它被截取,那么这个密钥以及相关的重要信息就没有什么安全可言了。
但是,如果用户要在公共介质 (如互联网) 上传递信息,他需要一种方法来传递密钥,当然物理的发送和接收密钥是最安全的,但有时这是不可能的。一种解决方法就是通过电子邮件来发送,但这样的信息很容易的被截取到,从而击破了加密的目的。用户不能加密包含密钥的邮件,因为他们必须共享另一个用来加密含有密钥邮件的密钥。这种困境就产生了问题:如果对称密钥用它们自己来加密,那为什么不直接用相同的方法在第一步就使用?一个解决方案就是用非对称加密,我们将在本课的后面提到。
所有类型加密的一个主题就是破解。一种减少使用对称加密所造成的威胁的反措施就是改变密钥的规律性。然而,定期改变密钥经常是困难的,尤其是你的公司里有很多用户。另外,黑客可以使用字典程序,password sniffing来危及对称密钥的安全,或者通过搜翻办公桌,钱包以及公文包。对称加密也很容易被暴力攻击的手段击败。
非对称加密
非对称加密在加密的过程中使用一对密钥,而不像对称加密只使用一个单独的密钥。一对密钥中一个用于加密,另一个用来解密。如用A加密,则用B解密;如果用B加密,则要用A解密。
重要的概念是在这对密钥中一个密钥用来公用,另一个作为私有的密钥;用来向外公布的叫做公钥,另一半需要安全保护的是私钥。非对称加密的一个缺点就是加密的速度非常慢,因为需要强烈的数学运算程序。如果一个用户需要使用非对称加密,那么即使比较少量的信息可以也要花上几个小时的时间。
非对称加密的另一个名称叫公钥加密。尽管私钥和公钥都有与数学相关的,但从公钥中确定私钥的值是非常困难的并且也是非常耗时的。在互联网上通信,非对称加密的密钥管理是容易的因为公钥可以任易的传播,私钥必须在用户手中小心保护。
HASH加密把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值。HASH加密用于不想对信息解密或读取。使用这种方法解密在理论上是不可能的,是通过比较两上实体的值是否一样而不用告之其它信息。HASH加密别一种用途是签名文件。它还可用于当你想让别人检查但不能复制信息的时候。
‘玖’ 目前常用的加密方法主要有两种是什么
目前常用的加密方法主要有两种,分别为:私有密钥加密和公开密钥加密。私有密钥加密法的特点信息发送方与信息接收方均需采用同样的密钥,具有对称性,也称对称加密。公开密钥加密,又称非对称加密,采用一对密钥,一个是私人密钥,另一个则是公开密钥。
私有密钥加密
私有密钥加密,指在计算机网络上甲、乙两用户之间进行通信时,发送方甲为了保护要传输的明文信息不被第三方窃取,采用密钥A对信息进行加密而形成密文M并发送给接收方乙,接收方乙用同样的一把密钥A对收到的密文M进行解密,得到明文信息,从而完成密文通信目的的方法。
这种信息加密传输方式,就称为私有密钥加密法。
私有密钥加密的特点:
私有密钥加密法的一个最大特点是:信息发送方与信息接收方均需采用同样的密钥,具有对称性,所以私有密钥加密又称为对称密钥加密。
私有密钥加密原理:
私有加密算法使用单个私钥来加密和解密数据。由于具有密钥的任意一方都可以使用该密钥解密数据,因此必须保证密钥未被授权的代理得到。
公开密钥加密
公开密钥加密(public-key cryptography),也称为非对称加密(asymmetric cryptography),一种密码学算法类型,在这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。
这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥。
‘拾’ 常用的加密算法有哪些
对称密钥加密
对称密钥加密 Symmetric Key Algorithm 又称为对称加密、私钥加密、共享密钥加密:这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单的相互推算的密钥,对称加密的速度一般都很快。
分组密码
分组密码 Block Cipher 又称为“分块加密”或“块加密”,将明文分成多个等长的模块,使用确定的算法和对称密钥对每组分别加密解密。这也就意味着分组密码的一个优点在于可以实现同步加密,因为各分组间可以相对独立。
与此相对应的是流密码:利用密钥由密钥流发生器产生密钥流,对明文串进行加密。与分组密码的不同之处在于加密输出的结果不仅与单独明文相关,而是与一组明文相关。
DES、3DES
数据加密标准 DES Data Encryption Standard 是由IBM在美国国家安全局NSA授权下研制的一种使用56位密钥的分组密码算法,并于1977年被美国国家标准局NBS公布成为美国商用加密标准。但是因为DES固定的密钥长度,渐渐不再符合在开放式网络中的安全要求,已经于1998年被移出商用加密标准,被更安全的AES标准替代。
DES使用的Feistel Network网络属于对称的密码结构,对信息的加密和解密的过程极为相似或趋同,使得相应的编码量和线路传输的要求也减半。
DES是块加密算法,将消息分成64位,即16个十六进制数为一组进行加密,加密后返回相同大小的密码块,这样,从数学上来说,64位0或1组合,就有2^64种可能排列。DES密钥的长度同样为64位,但在加密算法中,每逢第8位,相应位会被用于奇偶校验而被算法丢弃,所以DES的密钥强度实为56位。
3DES Triple DES,使用不同Key重复三次DES加密,加密强度更高,当然速度也就相应的降低。
AES
高级加密标准 AES Advanced Encryption Standard 为新一代数据加密标准,速度快,安全级别高。由美国国家标准技术研究所NIST选取Rijndael于2000年成为新一代的数据加密标准。
AES的区块长度固定为128位,密钥长度可以是128位、192位或256位。AES算法基于Substitution Permutation Network代换置列网络,将明文块和密钥块作为输入,并通过交错的若干轮代换"Substitution"和置换"Permutation"操作产生密文块。
AES加密过程是在一个4*4的字节矩阵(或称为体State)上运作,初始值为一个明文区块,其中一个元素大小就是明文区块中的一个Byte,加密时,基本上各轮加密循环均包含这四个步骤:
ECC
ECC即 Elliptic Curve Cryptography 椭圆曲线密码学,是基于椭圆曲线数学建立公开密钥加密的算法。ECC的主要优势是在提供相当的安全等级情况下,密钥长度更小。
ECC的原理是根据有限域上的椭圆曲线上的点群中的离散对数问题ECDLP,而ECDLP是比因式分解问题更难的问题,是指数级的难度。而ECDLP定义为:给定素数p和椭圆曲线E,对Q=kP,在已知P,Q 的情况下求出小于p的正整数k。可以证明由k和P计算Q比较容易,而由Q和P计算k则比较困难。
数字签名
数字签名 Digital Signature 又称公钥数字签名是一种用来确保数字消息或文档真实性的数学方案。一个有效的数字签名需要给接收者充足的理由来信任消息的可靠来源,而发送者也无法否认这个签名,并且这个消息在传输过程中确保没有发生变动。
数字签名的原理在于利用公钥加密技术,签名者将消息用私钥加密,然后公布公钥,验证者就使用这个公钥将加密信息解密并对比消息。一般而言,会使用消息的散列值来作为签名对象。