哈喽,各位观众朋友大家好,今天我来学习 note g s 的第二十一张 crypto, 那这个东西呢,是 note g s 中的内置的一个密码学模块儿, 那密码学呢,对于我们这个计算机科学呢,也是非常重要的一个领域,因为他可以帮我们提供加密解密以及哈西函数等些功能,或者是比如说我们要调这个支付接口,也可以进行数字签名等验证的一些技术,都是可以的。 那这个东西呢,它底层呢是由 c 或者是 c 加加去完成的,因为使用 java square 呢去实现这个东西呢,肯定是不可能的,因为 java square 运行这些算法它是非常慢的,所以说它底层呢就是由 c 或者是 c 加加去实现这些算法,然后通过 crept 这个模块去暴露给我们这个 javasque 的接口,那这样用起来的话也是非常方便,并且呢运行速度呢也是非常快的,可以减少我们这个开发者的一个新 负担。好好,那本章的故事是三个知识点,第一个就是对称加密,第二个是我们会讲一下非对称加密,第三个就是生成一个哈西函数以及他的使用场景。好,我们回到正题来讲一下对称加密。 好的,那么继续来讲一下对称加密。那对称加密这个东西是干什么的?其实就是双方的去协商定义一个 你要以及 lv 对就是相同的,比如说咱们俩协商定一个暗号,比如说今晚打老虎,然后你把你的 秘文跟秘药呢去进行混合,然后发给我,因为我是知道你的暗号的,所以说我就可以利用这个暗号呢,再把秘文去给他解出来。对,其实就是双方协定的一个秘药,以及这个 iv, 那这个的话就是对称加密。好让我们来写一下他这个 这一片的调用啊,其实也是非常简单的,我们通过 crepe 点 credit sifer iv, 那这个 iv 是什么意思呢?也就是 initialization writer, 就是初始化限量的一个意思。那这个函数呢?它拥有三个参数哦,第一个参数, 哦,第一个参数呢,它是这个 algorizing, 是一个算法,对,是一个算法,接收一个算法, 一般我们是通过 a, e, s, 二五六 c, p, c, 这一般是通过这个算法用的比较多一点。那第二个参数是一个 k, 也就是密,要是支持三十二位的,对,是三十二位的。第三个就是 i v, 对,也就是初始画向量的意思。对,初始画向量是支持十六位,对,支持十六位的。 好,然后我们就可以给它填充一下了。好,那第一个的话就是算法,那直接粘过来就可以了,这个非常简单。对,就是我们这个东西呢,要用什么算法去实现?哎,你就用这个 a, s, 二五六 c, b, c 这个算法呢去实现 这个 k 呢?它也只是三十二维,那我们就随便给它生成一个三十二维字节的一个东西,不就可以了吗?比如说 let k, 然后我们就通过 crap to 点 run the betas 生成一个三十位的一个 key, 哎,也是非常简单。好,那 i v 呢?也是一样的,然后 i v 呢?我们就通过 buffer 点 from, 然后通过 crap to 荣耀灯 bate 生成一个十六位的,好,完成了。那这个就是 i v 哦,那 i v 的作用是干什么的? i v 的作用呢?其实就是保证啊,保证我们这个生成的这个秘药串儿, 对, me 要串每次是不一样的对,每次是不一样的。对,它生成每次是不一样的。如果我们这个 me 要串缺了一位或者是两位哎,它还可以进行这个补码。对,我们这个 me 要串 缺少位数。对,还可以进行补码的操作,所以说这个东西也是非常有用的哦。然后这个函数返回一个 safer, 我们介绍一个 safer。 好,通过这个 safer 呢,就可以加密我们这个密文,然后通过 update 方法 哦,第一个参数就是密文对,密文,比如说我们加密一个小满 z s 哦,然后呢,加密的格式就是,呃 u t f 杠八,然后最后希望输出的格式一个十六禁止 x。 好,然后我们就可以输出一下它的结果了,我们可以 log 一下,这以后我们可以接受一个变量吧, 通过 safer 点 final hax 就输出一个十六进制。 对,输出密纹呢,是十六禁制的,十六禁制啊,然后我们来 log 一下, 好,没有问题,也是十六进制的,也就是零点三四五六七八九和 a b, c, d, e, f。 好,没问题,那这个话就是一个加密的一个用法。好,然后我们再实现一下解密。 好,解密,注意,解密呢,也是使用相同的算法和相同的 key, 以及相同的 i v。 对,以及相同的 i v, 就比如说我们用这个 c b c 加密的,那你不可能用 a b c 去解吧?对,因为算法都不一样,肯定是解不出来的,所以说我们使用什么算法加密就要使用什么算法去解密哦?然后还使用这个 crypto 点 correct, 就是这个 decreptor cipher any solution writer。 通过这个方法对,我们还是使用 c b c 去解密,还有 k 和 i v 呢,都是一样的。对,这两个都 都是一样的。好,我们把它起名调成 d e 吧,就是 decreptor。 好,然后通过 update 的方法去给它解一下密尔。 好,参数的还是一样的,只是把这两个位置给他换了一下,对,接受了一个禁止和这个 utf 杠八。对,我们这加密的位置给他换了一下,好,然后输出的话还是一样的,还是使用翻斗去给他进行输出好,然后我们来看一下解密的一个结果, 哎,这是加密之后的一个十六斤的串,那这是解出来的一个密文小买子,也是也是没有什么问题。那这个的话就是一个对称加密的一个算法,对,其实也是非常简单。好,然后我们再讲一下非对称加密的一个算法, 那我们继续来讲一下这个非对称加密,那非对称加密他是会生成两把钥匙,一个公要呢和一个私要,那私要呢?注意只能管理原因 拥有,而且是不能对外公开的,对,只能有一个人去拥有。而公药呢,它是可以对外去公开的,就是比如说我们想用你这个算法对,我们就可以拿到你的公药,然后去进行加密,然后呢私药呢,就可以对我们进行这个解密,那这个话就是一个非对称加密的一个大概意思啊。好,然后我们去写一下这个代码啊, 对,我们还是通过 crypto 点 generator key 对,我们就同步生成一下吧,对,它使用是 r s a 算法哦,这里边注意接收一个参数啊,对,接收一个参数哦,这个参数比较重要,就是这个 modules lens, 那这个参数是什么意思呢?就是它的 长度越长,对,长度越长呢,越安全,但是呢越慢,对,越慢,对,他算起来是越慢的,所以这个一般二零 四八就挺合适的啊。然后我们就有一个 private key 和 public key 啊,注意 private key 呢是不可以随便给人的, public key 呢,是可以下发给他们的,然后让他们拿到我们这个 public key 就可以进行加密,然后我们这个饲料呢就可以进行解密。好,然后我们可以加密试一下。 好,然后我们加密一个。什么呢?我们加密一个,比如说,嗯,小满 z s 吧。 哦,使用工药去进行加密,然后去调这个方法就可以了。然后第二参数呢,就是我们这个加密的一个字符哦,然后我们可以看一下加密之后的一个结果啊, 好,我们可以把它输出成一,是一个十六井的。好,我们来看一下加密之后的一个结果。 好,是非常非常长的好,这是它加密之后的一个结果。对,因为我们这里是二零四八,对,它比较长还可以,然后我们再给它进行下解密。好,解密的话是使用这个撕药去进行解密的, 对,加密的话我们是工要加密。好,然后我们来看一下解出来的值啊, 好,我们可以看到小满 z s 也是解出来的。哎,没有一点问题,那这个的话就是一个非对称加密的一个用法,那主要是使用工要加密,去私要去解密, 他的核心想法其实就是两把钥匙对两把钥匙进行这个互相加密和互相解密,然后他用起来是非常简单,去调用对应的方法就可以了。对应的 公要加密方法和对应这个死要加密方法,但啊,我们这只是演示他的一个场景啊。然后我们再讲一下哈吸函数啊,那么继续来学习这个哈吸函数,那哈吸函数呢?通常是不能被解密的,对,不能被解密的。 呃,因为他是单向的,对,因为他单向的不可逆的,对,他是不可逆的。好,我们来简单写个例子, 如果 correct 有点 correct, 哈西就通过这个,然后它的算法是非常多的,一般常用着什么呢? s h a 二五六, 还有大家耳熟能详的 m d 五,对,也是可以的。好,这的话我们就简单的接收一个哈西,然后也是通过 update 的方法对去进行我们这个 加密的一个妙串,比如说我们还是小买了 z s 好,然后我们给它输出一个结果,注意这个就不是翻的,这是通过摆架 st, 对,通过这个方法去给它输出,然后输出呢?还是十六禁止的 好,我们来看一下它加密之后的一个串啊,对,这个串不会很长,对,不会很长,大概就这么长,我们可以看到,那这个的话就是用 s h a 二五六去进行这个加密,然后注意这个东西是不可逆的啊。然后我们再看一下 m d 五啊,对,来看一下 m d 五, 对, m d 五的话,它就比较短了,这大概应该是有个三十二位。哦,那 m d 五跟这个 s h a 二五六呢?它们都是不能被解密的,都是单项的,并且是 不可逆的,那么这样子他就一定是安全的吗?哎,不是说很安全,因为他们具有唯一性。 对,具有文性,那是什么意思呢?好,给大家演示一下。比如说你的密码是个一二三四五六,对,一般我们存数据库不可能直接把用户的密码铭文传输,一般的都是使用 m d 五或者是一些别的算法去包一下,对,去包裹一下,然后 存储到这个数据库里边,这是不可能铭文存书的,不可能铭文存储的,这不可能是铭文存储的,所以一般都会包一下。好,我们来看一下这个一二三, 那加密之后是一幺零开头,然后结尾是三亿。好,我们说过这个东西它是具有威信的,也就是说这个值它是不会变的。哦,我们来看一下啊,这里话我们就直接来一个 m d 五, 对,在线加减密啊,比如说一二三四五六,哦,加密,对,我们可以看到,是吧?一幺零结尾是三亿,是不是和我们这可以对上,那也就是说我们可以使用壮库, 对,我们就可以使用撞库呢?去碰你的密码,对,去碰你的密码,对,这样碰到呢就是一二三四五,因为他是具有唯一性,他不会变的, 我只要一碰到我就知道他是一二三四五六,所以说他安全,他也不是说特别安全,还是有机会去撞哭去碰到你的一个密码的。所以说为什么要求我们的密码是使用的越来越复杂,就是加什么 标点符号大小写,就是为了防止这种情况,那这个话就是一个哈西的一个第一个用法就是防止铭文存储,直接使用 mdo 包裹一下去存到我们这个数据库里边。啊,那第二个 应用场景是什么呢?比如说你可以读取文件内容,对,然后转换成 m d 五,然后上传给服务端,也就是我们这个后端啊,后端拿到这个文件内容 生成 m d 五,对吧?要跟前端的 m d 五呢去匹配。对,前端也会把 m d 五给它传上来,跟前端 m d 五呢去匹配一下。哎,如果一致,那就是那就文件就没有问题,对,文件没问题, 对,如果不一致,对文件就可能会有缺少,那所以说我们可以使用 md 五呢去教验文件的一致性。 对文件仪式,那这种方法也是用的非常多啊。对,也是用的非常非常多的啊。那以上的话就是 crypto 以及哈西函数的一个讲解。