使用git或者ssh的时候,总是要输入密码,特地研究了一下相关知识。

密码和密钥

中文博大进深,很多外国人的概念翻译过来,很容易让人混淆。

比如密码和密钥就是这样。

密码,英文叫password。密钥,英文是叫key。

“密码”这个词,不同场景有不同意思。

  • “密码”指的是口令

    比如,手机锁屏密码/银行密码/微信支付密码等等,这里说的密码,其实是“口令/暗号”的意思。

    只不过平时输入“口令”的时候,屏幕上会显示“*******”,别人就不知道输入的是什么。

    但是在数据传输的时候,口令如果没有加密,那就会原封不动地被传输,这样就很危险。

    比如,你的银行“口令”设置成123456,然后发送数据给服务器的时候,有个黑客中途截取你的信息,一看口令是123456,直接就能盗窃你的账户了。

  • “密码”指的是密文

    上面以银行卡口令的例子中,为了不让黑客知道传输的口令是什么,我们就需要加密。

    由此就引申出了两个对应的概念:明文和密文。

    123456是明文,赤裸裸的,不想被人看到,我们顺序颠倒一下,这样简单的加密之后,就变成了数字54321,相应的,“12345”就叫明文,“54321”就叫密文。

在平时使用的时候,其实我们没有明确区分口令和密文,因为一般情况下口令都是要加密的,所以一律统称“密码”。

而密钥又是咋回事呢?

密钥,简单理解就是在加密的时候使用的一个参数。

还是以银行密码的加密为例,像上面那种简单颠倒一下顺序来加密,黑客很快就能破解了。

所以大牛们就发明很多算法来加密。

比方说搞一个函数来加密:f(x)=2x.

把银行“口令”:123456作为x输入到f(x)中。

那么,f(123456)=2*123456=246912

这里头,123456是我们说的“口令”。

经过f(x)这个算法加密之后,123456变成了246912,246912就叫“密文”。

而算法里面的参数“2”,就叫“密钥”。

当然,实际情况肯定更复杂,但按我理解,就是这么回事。

然后,有加密,自然就有解密。

上面例子中,如果知道了密钥“2”,以及对应的算法f(x),那很容易就从密文算出明文了。

这种,加密和解密,用的是同一个密钥,就叫对称加密

加密和加密,用的是不同密钥,就叫非对称加密

至于怎么实现非对称加密,那就是另一个领域的事了。