加密就是把 明文 (要传输的信息) 进行一系列变换,,天生 密文。
解密就是把 密文 再进行一系列变换,,还原成 明文 。
在这个加密和解密的过程中,,往往必要一个或者多个中间的数据,,辅助进行这个过程,如许的数据称为 密钥。
下面举个简单例子理解一下。
int a = 100;
int key = 200;
int b = a ^ key;
int c = b ^ key;
c等于什么呢?
这里我们都知道,0 ^ a = a,b ^ b = 0,
并且 ^ 是支持交换率的a ^ b ^ c == a ^ c ^ b == c ^ b ^ a
所以这里c = b ^ key == a ^ key ^ key == a ^ 0 == a
现在我们有一个客户端和服务端。客户端发数据a,但并不是直接发的,我们把要发的a称为原始数据,把a和key做异或运算等于b,网络传送的时候把b传过去,服务器端收到b,服务端也必须要有一个key,然后b^key,终极等于a。
a---->原始数据
key---->密钥
a^key---->加密的过程
b---->密文
b---->解密
这里举一个简单的生活上的例子:
A 要给 B ⼀些重要的文件, 但是 B 大概不在. 于是 A 和 B 提前做出约定:
B 说: 我桌子上有个盒子, 然后我给你⼀把锁, 你把文件放盒子里用锁锁上, 然后我回头拿着钥匙来开锁取文件.
在这个场景中, 这把锁就相称于公钥, 钥匙就是私钥. 公钥给谁都行(不怕泄漏), 但是私钥只有 B 自己持有. 持有私钥的人才能解密. 对称密钥:一个秘钥,速率快 非对称密钥:两个密钥,公钥、私钥,速率慢
如何理解加密的安全性?
从算力本钱角度看,必要算力越大加密的安全性越大。如一条消息本身就值10块钱但是加密之后破解这条消息必要花10个亿本钱,终极我们认为这个密钥本身是安全的。
4.数据摘要&&数据指纹