非对称加密:
有两个密钥,一个是公钥一个是私钥,公钥是公开的,私钥是自己保存的。
A与B通信,A要给B发送消息,就要用B的公钥加密,在公钥环上找到B的公钥,用公钥加密完后发送给B,B用自己的私钥解密。当需要验证身份时,则A先在消息后面写上用自己私钥加密后的签名,然后再用B的公钥进行加密,再交给B,B先用自己的私钥解密,解密后再用A的公钥解密看消息是否由A发送。
不能先加密信息然后再签名。因为这样当别人更改你的签名后接收方就无法确认发送方是谁
D-H密钥交换算法:
1.A和B先商量好一个大的素数P和一个大的整数Q,Q要符合1<Q<P,P和Q不需要保密
2.A随便选取一个比较大的随机数C,得X1=Q^C mod P(X1等于Q的C次幂 mod P)
3.B也随便选取一个比较大的随机数D,得X2=Q^D mod P(X2等于Q的D次幂 mod P)
4.A把X1给B,B把X2给A
5.A:key=X2^C mod P(key=X2的C次幂 mod P),B:key=X1^D mod P(key等于X1的D次幂 mod P),此时得到的key是相等的
这就相当于是(QC)D mod P和(QD)C mod P,所以结果相同
RSA算法:
1.找出两个质数p,q
2.n=p*q
3.φ(n)=(p-1)(q-1)
4.找一个公钥e,e要满足1<e<φ(n)且为整数且与φ(n)没有公因子
5.私钥d符合ed = 1 mod φ(n),也就是 ed mod φ(n)=1
6.加密:密文设为x,明文设为a,则x=a^e mod n(密文等于明文的e次幂(即公钥次幂)mod n)
7.解密:a=x^d mod n(明文等于密文的d次幂(即私钥次幂)mod n)