什么是反射
- 反射是 java 提供的一套 API,通过这套 API 能够在运行期间
- 根据类名加载类
- 获取类的各种信息,如类有哪些属性、哪些方法、实现了哪些接口 ...
- 类型参数化,根据类型创建对象
- 方法、属性参数化,以统一的方式来使用方法和属性
- 反射广泛应用于各种框架实现,例如
- Spring 中的 bean 对象创建、依赖注入
- JUnit 单元测试方法的执行
- MyBatis 映射查询结果到 java 对象
- ...
- 反射在带来巨大灵活性的同时也不是没有缺点,那就是反射调用效率会受一定影响
什么是 Java 泛型
- 泛型的主要目的是实现类型参数化,java 在定义类、定义接口、定义方法时都支持泛型
- 泛型的好处有
- 提供编译时类型检查,避免运行时类型转换错误,提高代码健壮性
- 设计更通用的类型,提高代码通用性
请介绍一下你知道的加密算法
一般分类如下
- 对称加密
- 非对称加密
- 哈希摘要
- 电子签名
- 密码存储
其中
- 对称加密常见的有:DES、AES 等,国家标准有 SM4
- 非对称加密常见的有:RSA,ECDSA 等,国家标准有 SM2
- 哈希摘要有:MD5、SHA-2、SHA-3 等,国家标准有 SM3
- 电子签名有:通常会结合 RSA、ECDSA 和哈希摘要完成签名,或者是 HMAC
- 密码存储:直接使用哈希摘要作为密码存储、加盐存储、BCrypt
解释对称加密、非对称加密、哈希摘要
- 对称加密
- 加密和解密的密钥使用同一个
- 因为密钥只有一个,所以密钥需要妥善保管
- 加解密速度快
- 非对称加密
- 密钥分成公钥、私钥,其中公钥用来加密、私钥用来解密
- 只需将私钥妥善保管,公钥可以对外公开
- 如果是双向通信保证传输数据安全,需要双方各产生一对密钥
- A 把 A公钥 给 B,B 把 B公钥 给 A,他们各自持有自己的私钥和对方的公钥
- A 要发消息给 B,用 B公钥 加密数据后传输,B 收到后用 B私钥 解密数据
- 类似的 B 要发消息给 A,用 A公钥 加密数据后传输,A 收到后用 A私钥 解密数据
- 相对对称加密、加解密速度慢
- 哈希摘要,摘要就是将原始数据的特征提取出来,它能够代表原始数据,可以用作数据的完整性校验
- 举个例子,张三对应着完整数据
- 描述张三时,会用它的特征来描述:他名叫张三、男性、30多岁、秃顶、从事 java 开发、年薪百万,这些特征就对应着哈希摘要,以后拿到这段描述,就知道是在说张三这个人
- 为什么说摘要能区分不同数据呢,看这段描述:还是名叫张三、男性、30多岁、秃顶、从事 java 开发、月薪八千,有一个特征不符吧,这时可以断定,此张三非彼张三
比较一下 DES、AES、SM4
它们都是对称加密算法
- DES(数据加密标准)使用56位密钥,已经不推荐使用
- AES(高级加密标准)支持 128、192、256位密钥长度,在全球范围内广泛使用
- SM4(国家商用密码算法)支持 128位密钥,在中国范围内使用
比较一下 RSA、ECDSA 和 SM2
它们都是非对称加密算法
- RSA 的密钥长度通常为 1024~4096,而 SM2 的密钥长度是 256
- SM2 密钥长度不需要那么长,是因为它底层依赖的是椭圆曲线、离散对数,反过来 RSA 底层依赖的是大数分解,前者在相同安全级别下有更快的运算效率
- SM2 是中国国家密码算法,在国内受政策支持和推广
- ECDSA 与 SM2 实现原理类似