Java加密算法概述
密码的常用术语:
1.密码体制:由明文空间、密文空间、密钥空间、加密算法和解密算法5部分组成。
2.密码协议:也称为安全协议,是指以密码学为基础的消息交换的通信协议,目的是在网络环境中提供安全的服务。
3.柯克霍夫原则:数据的安全基于密钥而不是算法的保密。即系统的安全取决于密钥,对密钥保密,对算法公开。——现代密码学设计的基本原则。
密码的分类:
按照时间可以分为古典密码和现代密码。
按照加密算法是否公开可以分为受限制的算法和基于密钥的算法(之所以把算法公开主要是防止加密算法的发明人利用它做一些不为人知的事)。
按照密码体制的不同可以分为对称密码、非对称密码。
按照明文的处理方法,可以分为:
- 分组密码:加密时将明文分成固定长度的组,用同一密钥和算法对每一块加密,输出也是固定长度的密文。多用于网络加密。
- 流密码:也称为序列密码。加密时每次加密一位或者一个字节明文。
散列函数(又称为hash函数),可以用来验证数据的完整性。它的特点是:长度不受限制、hash值容易计算、散列的运算是不可逆的。
与散列函数相关的算法有:消息摘要算法(MD5等)、安全散列算法(SHA)、消息认证码算法(MAC)。
数字签名:主要针对以数字的形式存储的消息进行的处理。
OSI与TCP/IP安全体系
业务流填充机制:在数据传输的过程中填入一些额外的信息混淆真实的数据。
Java安全组成、包、及第三方拓展
打开jdk安装目录下的jre\lib\security\java.security文件:
我们要使用第三地方的加解密的提供者可以在上面增加provider和它的引用。参看文档的上面一部分我们可以使用调用方法的形式,参见文档:
JDK本身提供了3个包:
java.security:消息摘要
javax.crypto:安全消息摘要,消息认证(鉴别)码
java.net.ssl:安全套接字(常用的类:HttpsURLConnection、SSLContext)
第三方java扩展:
Bouncy Castle:支持两种方案:①配置;②调用
Commons Codec:Apache,Base64、二进制、十六进制、字符集编码;URL编码/解码