1. 基本概念
二分查找是一种在 有序数组(或者满足单调性的集合/区间)中查找目标值的算法。
核心思想是:
- 每次把搜索范围减半;
- 根据目标值和中间值的比较,决定往左半边还是右半边继续查找。
时间复杂度:
- 每次都缩小一半 → O(log n)
空间复杂度: - 迭代版 O(1),递归版 O(log n)(栈深度)
二分查找是一种在 有序数组(或者满足单调性的集合/区间)中查找目标值的算法。
核心思想是:
时间复杂度:
对于很多场景,比如说图片展示,还有一些前后端请求,有时候通过 url 会比较麻烦。
通过 Base64 转换处理之后比较方便,当然也有把这个当做一种加密策略的。(实际上只是转码,不是严格意义的加密)
Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便。
在实际应用上,Base64除了能将Binary资料可视化之外,也常用来表示字串加密过后的内容。
早期在Java上做Base64的编码与解码,会使用到JDK里sun.misc套件下的BASE64Encoder和BASE64Decoder这两个类别,用法如下:
神探夏洛克
二战加解密
卷福
好的算法:告诉你算法,没有秘钥,也无法破解。
SM4是一种分组密码算法,其分组长度为128位(即16字节,4字),密钥长度也为128位(即16字节,4字)。
其加解密过程采用了32轮迭代机制(与DES、AES类似),每一轮需要一个轮密钥(与DES、AES类似)。
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.59</version>
</dependency>
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。
DES设计中使用了分组密码设计的两个原则:混淆(confusion)和扩散(diffusion),其目的是抗击敌手对密码系统的统计分析。
混淆是使密文的统计特性与密钥的取值之间的关系尽可能复杂化,以使密钥和明文以及密文之间的依赖性对密码分析者来说是无法利用的。
扩散的作用就是将每一位明文的影响尽可能迅速地作用到较多的输出密文位中,以便在大量的密文中消除明文的统计结构,并且使每一位密钥的影响尽可能迅速地扩展到较多的密文位中,以防对密钥进行逐段破译。
3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。
它相当于是对每个数据块应用三次DES加密算法。
由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;
3DES 即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
3DES又称Triple DES,是DES加密算法的一种模式,它使用2条不同的56位的密钥对数据进行三次加密。
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。
经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。
2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijdael之名命之,投稿高级加密标准的甄选流程。(Rijdael的发音近于 "Rhine doll"。)
如果你是黑帮老大,平时和手下沟通,如何保证自己的信息安全呢?
在神探夏洛克的第一季中,就讲述了一个如何侦破黑帮的加密交流的故事。
这种密码利用的是密码字典。
密码本身可以是一本书,比如常见的《圣经》、《杀死一只知更鸟》,或者纽约地图?
RSA加密是一种非对称加密。
可以在不直接传递密钥的情况下,完成解密。
这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。
是由一对密钥来进行加解密的过程,分别称为公钥和私钥。
两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。
加密和签名都是为了安全性考虑,但略有不同。常
有人问加密和签名是用私钥还是公钥?其实都是对加密和签名的作用有所混淆。
简单的说,加密是为了防止信息被泄露,而签名是为了防止信息被篡改。
RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。
这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。
是由一对密钥来进行加解密的过程,分别称为公钥和私钥。
两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。
通常个人保存私钥,公钥是公开的(可能同时多人持有)。
加密和签名都是为了安全性考虑,但略有不同。
常有人问加密和签名是用私钥还是公钥?
其实都是对加密和签名的作用有所混淆。
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。