JavaSE系列学习1.3-JavaSecurity(JCA)和密码学
来源:互联网 发布:mac os sierra dmg u盘 编辑:程序博客网 时间:2024/05/20 20:58
密码学概述及基本概念:
1.密码(cipher):
通常密码学中的密码指的是密码算法,是用于加密和解密的数学函数(一般情况下加密和解密有两种不同的密码算法)。有别于我们日常生活中所说的密码,我们说的密码是一种用于身份认证的口令(password)。
2.密钥(key):
密钥是在在密码算法运行需要输入的参数,分为对称密钥和非对称密钥。
相同明文相同加密算法的情况下,使用不同的密钥会得到不同的密文结果。
密钥越长越安全,但是密钥过长算法运行速度会很慢。
3.对称密钥:
对称密钥用于对称加密算法中。
在对称加密算法中,加密和解密过程使用的密钥是相同的。
对称加密算法的安全性取决于密钥的保密性。
4.非对称密钥:
用于非对称加密算法中,分为公钥和私钥。
公共密钥是公开的,而私有密钥必须保密。
公钥和私钥的其中一把用于加密时,则另一把就用于解密。
用公钥加密的文件只能用私钥解密,而私钥加密的文件只能用公钥解密。
为发送一份保密报文,发送者必须使用接收者的公共密钥对数据进行加密,一旦加密,只有接收方用其私人密钥才能加以解密。
有时候也存在用私钥加密用公钥解密的情况,如数字签名。
常见加密算法:
通常把加密算法分为三类:对称加密算法(传统加密算法)、非对称加密算法(公钥加密算法)和哈希算法。
1.对称加密算法:
指加密和解密使用相同密钥的加密算法。
优点:运行速度快;
缺点:需要在服务端和客户端之间共享密钥,然而难以做到在公开的计算机网络上安全地传送和保管密钥。且由于双方都使用相同的密钥,无法实现数数字签名等功能,无法保证信息的不可否认性。
常见的对称加密算法:
分组密码 :DES、3DES、
AES、
流密码:RC2、RC4、RC5、
IDEA、
TDEA、
Blowfish、
SKIPJACK
2.非对称加密算法
加密和解密使用不同的密钥–公钥和私钥来进行。
非对称加密的过程:
1.服务端生成配对的公钥和私钥
2.私钥保存在服务端,公钥发送给客户端
3.客户端使用公钥加密明文传输给服务端
4.服务端使用私钥解密密文得到明文
优点:由于非对称加密无需在客户端和服务端之间共享密钥,只要私钥不发给任何用户,即使公钥在网上被截获,也无法进行解密。安全性得到了很大的提升;
缺点:加解密速度远远慢于对称加密算法。
常见的非对称加密算法:
RSA、
Elgamal、
背包算法、
Rabin、
D-H、
ECC(椭圆曲线加密算法)
3.哈希散列算法
散列函数H是一个公开的函数,它可将任意长度的报文M变换成固定长度的散列码h,散列函数表示为h=H(M),它生成报文所独有的“指纹”(摘要)。
散列函数的特征:
1. 对于不同报文不能产生相同散列码(事实上哈希碰撞的概率是很小的),改变原始报文中任意一位数值将产生完全不同的散列码
2. 对任意一个报文无法预知散列码
3. 无法根据散列码倒推报文
4. 散列算法是公开的,其安全性来自于单向散列的能力
5. 散列码长度固定,与报文长度无关
常见的哈希算法:
MD4、MD5、SHA1
- JavaSE系列学习1.3-JavaSecurity(JCA)和密码学
- java密码学系列学习之一
- Java 密码学架构 - Java Cryptography Architecture (JCA)
- 【Java安全技术探索之路系列:Java可扩展安全架构】之三:JCA(二):JCA类和接口
- JCA
- 学习密码学
- 应用密码学Safer K系列加密学习笔记
- JavaSE系列学习1.2-Java基础
- 密码学基础系列
- JCA 1.5学习总结 第二章:概述
- jca 1.5 inbound 学习笔记 (by quqi99)
- JCA和Web服务的讨论
- JCA 1.5: 优化和生命周期管理
- JCA和Web服务的讨论
- JavaSecurity和JAAS——Java标准安全体系概述(上)
- JavaSecurity和JAAS——Java标准安全体系概述(下)
- 密码学学习记录(一)古典密码学
- JavaSE学习笔记--IO流和File
- 用构造方法构建对象时使用new关键字和不使用new关键字的差别
- Spark参数配置
- 程序即大脑的思考过程
- 4大技术巨头16年的传奇史
- sql执行顺序及性能优化
- JavaSE系列学习1.3-JavaSecurity(JCA)和密码学
- 【云周刊】第145期:2017天猫双11总交易额1682亿,背后阿里绝密50+技术揭秘!
- 类型特征萃取
- vuex在vue项目中的使用
- Springboot+proguard+maven 混淆
- JAVA中文件下载和文件批量下载方法
- CMake与动态链接库(dll, so, dylib)
- TabLayout基础使用
- CA终端的基本实现