Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
900e425
Create cccccxx
cccccxx Jan 24, 2018
026a165
Add files via upload
cccccxx Jan 24, 2018
6e56be6
Add files via upload
cccccxx Jan 24, 2018
d3d16ee
Delete 密码学基础(二).md
cccccxx Jan 24, 2018
afd7105
Delete 密码学预热.md
cccccxx Jan 24, 2018
e6dd801
Add files via upload
cccccxx Jan 24, 2018
8be7ccc
Delete 密码学基础(二).md
cccccxx Jan 24, 2018
027e418
Create 1
cccccxx Jan 24, 2018
ee16dde
Add files via upload
cccccxx Jan 24, 2018
610d4e0
Delete 1
cccccxx Jan 24, 2018
eb69347
Add files via upload
cccccxx Jan 24, 2018
06800ae
Update 密码学基础(二).md
cccccxx Jan 24, 2018
3ec9137
Add files via upload
cccccxx Jan 24, 2018
d6a907a
Add files via upload
cccccxx Jan 24, 2018
cf5ddf7
Update 密码学预热.md
cccccxx Jan 24, 2018
08ccc06
Update 密码学预热.md
cccccxx Jan 24, 2018
4348480
Update 密码学预热.md
cccccxx Jan 24, 2018
088f2e8
Update 密码学预热.md
cccccxx Jan 24, 2018
7250807
Add files via upload
cccccxx Jan 25, 2018
06de7ca
Add files via upload
cccccxx Jan 25, 2018
be4d220
Update 密码学基础(三).md
cccccxx Jan 25, 2018
7647dad
Add files via upload
cccccxx Jan 25, 2018
e3a1c88
Update 密码学基础(三).md
cccccxx Jan 25, 2018
6210fff
Update 密码学基础(三).md
cccccxx Jan 25, 2018
28a745c
Update 密码学基础(三).md
cccccxx Jan 25, 2018
07f1656
Update 密码学基础(三).md
cccccxx Jan 25, 2018
f2e9079
Add files via upload
cccccxx Jan 25, 2018
ac71713
Delete 1511431425340.png
cccccxx Jan 25, 2018
d4882af
Rename 密码学基础(一).md to 20180125-01.md
cccccxx Feb 1, 2018
4c34d64
Rename 密码学基础(二).md to 20180125-02.md
cccccxx Feb 1, 2018
4a1d7d6
Rename 密码学基础(三).md to 20180125-03.md
cccccxx Feb 1, 2018
3922b2f
Rename 密码学预热.md to 20180125-00.md
cccccxx Feb 1, 2018
5811ee7
Add files via upload
cccccxx Feb 1, 2018
4542762
Add files via upload
cccccxx Feb 1, 2018
c5737d8
Rename 密码学基础(四).md to 20180125-04.md
cccccxx Feb 1, 2018
ea634f3
Update 20180125-04.md
cccccxx Feb 1, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 97 additions & 0 deletions Homework/8team/cccccxx/20180125-00.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
### 密码学预热
逻辑或

只要有一个为真即为真

1001或1100 结果为1101

逻辑与

需要两个都为真才是真

1001与1110 结果为1000

逻辑非

反着来

1110 非 0001

逻辑异或

如果两个位不相同则为1,相同则为0,可看为不进位的加法

1101 异或 1010 结果为0111

逻辑异

按位加(即不进位的加法)

逻辑加

也就是或(两者同时为0方为0)

明码:可以直接看到的

补码:原码为正时补码同原码一样,原码为负时,符号位不变,取反加1

反码:原码1变0,0变1
明文:没有加密的文字

密文:加密的文字

公钥与私钥:公钥加密的内容只能用私钥解密,用私钥加密的内容只能 用公钥解密。

比如说,我要给你发送一个加密的邮件。首先,我必须拥有你的公钥,你也必须拥有我的公钥。
首先,我用你的公钥给这个邮件加密,这样就保证这个邮件不被别人看到,而且保证这个邮件在传送过程中没有被修改。你收到邮件后,用你的私钥就可以解密,就能看到内容。
其次我用我的私钥给这个邮件加密,发送到你手里后,你可以用我的公钥解密。因为私钥只有我手里有,这样就保证了这个邮件是我发送的。
当A->B资料时,A会使用B的公钥加密,这样才能确保只有B能解开,否则普罗大众都能解开加密的讯息,就是去了资料的保密性。验证方面则是使用签 验章的机制,A传资料给大家时,会以自己的私钥做签章,如此所有收到讯息的人都可以用A的公钥进行验章,便可确认讯息是由 A 发出来的了。

http://blog.csdn.net/bberdong/article/details/41079739
http://blog.csdn.net/tanyujing/article/details/17348321

密钥空间(密钥数量)
加密密钥大小的范围。通常以位为单位,即以位的多少来对独特密钥进行计数。密钥的位越长,其密钥空间也就越大。例如:当密钥长度为r时,密钥空间有2的r次方个元素。

凯撒密码
基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。
特定的当偏移量为3时才是凯撒密码。
![image](./image/1516692243853.png)


简单替换密码
采用字母表的任何排列组合作为密钥
![image](./image/1516692260216.png)


换位密码
与明文的字母保持相同,区别是顺序被打乱了。

分组密码
分组密码是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。

对称密码
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。对称密码术通常需要在一个受限组内共享密钥并同时维护其保密性。

公钥密码
公钥密码又称为非对称密码,拥有公钥密码的用户分别拥有加密密钥和解密密钥。通过加密密钥不能得到解密密钥。并且加密密钥是公开的。
与对称密码相反

单向散列函数
单向散列函数,又称单向Hash函数、杂凑函数,就是把任意长的输入消息串变化成固定长的输出串且由输出串难以得到输入串的一种函数。这个输出串称为该消息的散列值。一般用于产生消息摘要,密钥加密等.

消息验证码
密码学中,通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具。构造方法由M.Bellare提出,安全性依赖于Hash函数,故也称带密钥的Hash函数。消息认证码是基于密钥和消息摘要所获得的一个值,可用于数据源发认证和完整性校验。
在发送数据之前,发送方首先使用通信双方协商好的散列函数计算其摘要值。在双方共享的会话密钥作用下,由摘要值获得消息验证码。之后,它和数据一起被发送。接收方收到报文后,首先利用会话密钥还原摘要值,同时利用散列函数在本地计算所收到数据的摘要值,并将这两个数据进行比对。若两者相等,则报文通过认证。

数字签名
数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。
数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

数字证书
数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。

伪随机数发生器
伪随机数发生器用于在系统需要随机数的时候,通过一系列种子值计算出来的伪随机数。因为生成一个真正意义上的“随机数”对于计算机来说是不可能的,伪随机数也只是尽可能地接近其应具有的随机性,但是因为有“种子值”,所以伪随机数在一定程度上是可控可预测的

13 changes: 13 additions & 0 deletions Homework/8team/cccccxx/20180125-01.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
### 密码学基础(一)
小测验
1.时钟用的是什么进制?
时钟用的是六十进制,每过六十分钟进一

2.将二进制数1111000010.01101分别转换为八进制、十进制和十六进制数
八进制:1702.32
十进制:962.40625
十六进制:3c2.68

3.将十进制数137.5分别转换成二进制、八进制。
二进制:10001001.1
八进制:211.4
140 changes: 140 additions & 0 deletions Homework/8team/cccccxx/20180125-02.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
### 密码学基础(二)
凯撒密码的偏移量不一定为3,其偏移量可以为0~25

简单替换密码与简单置换密码的区别在于字母本身是否改变:简单替换密码为每个字母都替换成另一个字母,其替换成的字母不一定在明文中;简单置换密码则将明文重新排列


简单替换密码:
![image](./image/1516765704875.png)

简单置换密码:
置换只不过是一个简单的换位,每个置换都可以用一个置换矩阵Ek来表示。每个置换都有一个与之对应的逆置换Dk。置换密码的特点是仅有一个发送方和接受方知道的加密置换(用于加密)及对应的逆置换(用于解密)。它是对明文L长字母组中的字母位置进行重新排列,而每个字母本身并不改变。
![image](./image/1516766581651.png)



----------


小测验

1.获取下面凯撒密码中的KEY值:
CQN ZDRLT KAXFW OXG SDVYB XENA CQN UJIH MXP XO LJNBJA JWM HXDA DWRZDN BXUDCRXW RB YAVBYOPVAKRA

答:使用c语言解码
//#include<stdlib.h>
//#include<string.h>
//#include<stdio.h>
//加密
int kaisa_encrypt(const char *str1,char *str2,const int len)
{
int i;
if(str1 == NULL || str2 == NULL || len <= 0){
return -1;
}
int m = strlen(str1);
if(m <= 0){
return -1;
}
for(i=0;i<m;i++)
{
if(str1[i]>='a'&&str1[i]<='z')
str2[i]='a'+(str1[i]-'a'+len)%26;
else
str2[i]=str1[i];
}
return 0;
}
//解密
int kaisa_decrypt(char *str2,char *str3, int len)
{
int i;
char all_letter[26]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if(str3 == NULL || str2 == NULL || len <=0){
return -1;
}
int m = strlen(str2);
if(m <= 0){
return -1;
}
for(i=0;i<m;i++)
{
if(str2[i]>=all_letter[len]&&str2[i]<='Z')
str3[i]=str2[i]-len;
else if(str2[i]>='A'&&str2[i]<=all_letter[len-1])
str3[i]=str2[i]+(26-len);
else
str3[i]=str2[i];
}
return 0;
}

int main()
{ int a;
char str1[20]="binbin";
char str2_encrypt[200]="CQN ZDRLT KAXFW OXG SDVYB XENA CQN UJIH MXP XO LJNBJA JWM HXDA DWRZDN BXUDCRXW RB YAVBYOPVAKRA";
char str3_decrypt[200];
//加密
kaisa_encrypt(str1,str2_encrypt,3);
printf("原文%s-->密文%s\n",str1,str2_encrypt);
/***解密****/
for(a=0;a<=25;a++)
{kaisa_decrypt(str2_encrypt,str3_decrypt,a);
printf("偏移值为%d\n",a);
printf("密文%s\n",str2_encrypt);
printf("原文%s\n",str3_decrypt);
printf("-------------------------------------------");}
return 0;
}


![image](./image/1.jpg)
解得偏移量为9

2.获取下面简单替换码中的KEY值:
DA RZY LVPWMZRA MEX AEG JLT SYLX RZWB PA QSWYTX W LP WPNSYBBYX FYSA KYVV XETY AEGS BEVGRWET UYA WB BZSYZBVPXQZQ RZWB

答:使用字频分析网站:https://quipqiup.com/
得KEY值为BY THE ALMIGHTY GOD YOU CAN READ THIS MY FRIEND I AM IMPRESSED VERY WELL DONE YOUR SOLUTION ?EY IS SHREHSLMDFHF THIS LITTLE CHALLENGE WAS NOT TOO HARD WAS IT

3.获取下面简单置换码中的KEY值
oWdnreuf.lY uoc nar ae dht eemssga eaw yebttrew eh nht eelttre sra enic roertco drre . Ihtni koy uowlu dilekt oes eoyrup sawsro don:wf nsedergmam.r

答:观察可看出两个字母间交换了顺序,编写C语言代码实现调整顺序
//#include <stdio.h>
//#include <stdlib.h>

int main() {
char a[]="oWdnreuf.lY uoc nar ae dht eemssga eaw yebttrew eh nht eelttre sra enic roertco drre . Ihtni koy uowlu dilekt oes eoyrup sawsro don:wf nsedergmam.r";
int b=sizeof(a)/sizeof(char);
int c,i,f,g;
f=0,g=0;
c=b/2;
char d[c],e[c];
for(i=0;i<b;i++)
{if(i%2==0)
{ d[f]=a[i];
f++;}
else
{e[g]=a[i];
g++;
}
}
for(i=0;i<c;i++)
printf("%c%c",e[i],d[i]);
return 0;
}
得出KEY值为Wonderful. You can read the message way better when the letters are in correct order. I think you would like to see your password now: fsnderemgmar.
![image](./image/2.jpg)



4.将下面的明文用栅栏密码加密,密钥为3。写出加密后的密文(要求写出加密过程,最好是图示,图示样式参考上文):
guan guan ju jiu zai he zhi zhou

去掉空格分成三三一组(3栏的栅栏加密,秘钥为3):gua ngu anj uji uza ihe zhi zho u ;最后一组不足三个可以补上任意字母或空格。
提取第一个字符:gnauuizzu;
提取第二个字符:ugnjzhhh ;
提取第三个字符:aujiaeio ;
三串字符连接就是密文:
gnauuizzuugnjzhhhaujiaeio
Loading