java-信息安全(十八)java加密解密,签名等总结
一、基本概念
加密:
  密码常用术语: 明文,密文,加密,加密算法,加密秘钥,解密,解密算法,解密秘钥,
  密码分析:分析密文从而推断出明文或秘钥的过程
  主动攻击:入侵密码系统,采用伪造,修改,删除等手段向系统注入假消息进行欺骗。(对密文有破坏作用)
  被动攻击:对一个保密系统采取截获密文并对其进行分析和攻击。(对密文没有破坏作用)
  密码体制:由明文/密文/密钥空间,加密算法和解密算法五部分构成
  密码协议:也称安全协议,以密码学为基础的消息交换通信协议
  密码系统:指用于加密、解密的系统。
  柯克霍夫原则:密码的安全基于密钥而不是算法的保密。现代密码学设计的基本原则
密码分类:
  古典密码:以字符块为基本加密单元;现代密码:以信息块为基本加密单元
  受限算法:保密性基于算法,应用军事,属于古典密码;基于密钥算法:算法公开,密钥保密。属于现在密码。
  对称密码:加解密密钥相同;非对称密码:密钥分为公钥私钥。
  分组密码:明文分组,对每块加密;流密码:也称序列密码,每次加密一位或一个字节。
  散列函数:用来验证数据的完整性,长度不限,哈希值容易算,运算过程不可逆。如,md5,sha,mac
  数字签名:针对以数字的形式存储的消息进行的处理。
OSI安全体系:
  osi:应表会传网数物
  安全机制:认证,数字签名,访问控制,路由控制,加密机制,业务流填充,数据完整性,公证
  安全服务:认证(来源鉴别),访问控制,数据保密性服务,数据完整性服务,抗否认性服务
  tcp/ip:应传网网,每一层都有相应的安全体系结构
数字签名:带有密钥(公钥、私钥,私钥签名,公钥验证)的消息摘要算法
  OSI参考模型,验证数据完整性、认证数据来源、抗否认
二、java的安全组成
java的安全组成:jca(加密架构),jce(加密扩展),jsse(安全套接扩展,基于ssl),jaas(鉴别与安全服务)
jdk相关包:
  java.security:消息摘要
  javax.crypto:安全消息摘要,消息认证(鉴别)码
  java.net.ssl:java套接字,常用类HttpsURLConnection、SSLContext
第三方扩展:
  Bouncy Castle两种支持方案
    1.在jdk中的jre\lib\security\java.security文件配置Provider
    2.Security类中使用addProvider 或 insertProviderAt方法
  Commons Codec
    Apache
    Base64、二进制、十六进制、字符集编码
    Url编码/解码
三、常见算法
BASE64,base58、MD5,SHA,HMAC,RIPEMD:http://www.cnblogs.com/bjlhx/p/6544311.html
四、对称加密
DES,3DES,AES,Blowfish,RC2,RC4:https://www.cnblogs.com/bjlhx/p/6544766.html
  DES:(Data Encryption Standard)数据加密标准
  3DES:密钥加长,多次叠加
  AES:ssh协议,多用于移动,高级
  PBE:基于口令加密,可以额外加盐
PBE:
DES、3DES、AES加密流程:
  发送方—>构建密钥对-》公布密钥给接收方—>使用密钥对数据加密-》发送加密数据给接收方。
  接收方—》接收密钥和加密数据解密数据
PBE加密流程:
  发送方—>构建密钥-》公布密钥给接收方-》构建盐—>使用口令,盐对数据加密-》发送盐、加密数据给接收方。
  接收方—》使用密钥、口令,盐解密数据
五、非对称加密
DH:https://www.cnblogs.com/bjlhx/p/6563926.html
RSA:https://www.cnblogs.com/bjlhx/p/6552722.html
ELGamel
ECC:https://www.cnblogs.com/bjlhx/p/6564817.html
加密算法:
  DH(Diffie-Hellman)密钥交换算法
  RSA:基于因子分解。一般私钥加密,公钥解密;也可以公钥加密,私钥解密。
  ELGamel:基于离散对数
  ECC( Elliptic curve Cryptography) 椭圆曲线加密
DH加密流程:
初始化DH算法密钥对:
    发送方—>构建发送方密钥-》公布发送方密钥给接收方-》使用接收者公钥构建发送方本地密钥
    接收方—》使用发送方密钥密钥构建接收方密钥-》公布接收者公钥给发送方—》构建接收方本地密钥
DH算法加密消息传递:
  发送方—>使用本地密钥加密消息—》发送加密消息给接收方
  接收方—》使用本地密钥解密消息
RSA加密流程:
私钥加密,公钥解密
    发送方—>私钥钥解密加密消息—》发送加密消息给接收方
    接收方—》使用公钥解密消息
公钥加密,私钥解密
    发送方—>公钥钥解密加密消息—》发送加密消息给接收方
    接收方—》使用私钥解密消息
六、数字签名
RSA签名:https://www.cnblogs.com/bjlhx/p/6559653.html
DSA签名:https://www.cnblogs.com/bjlhx/p/6564609.html
ECDSA:https://www.cnblogs.com/bjlhx/p/6564817.html
DSS(Data Signature Standard)数字签名标准
常用签名算法:RSA、DSA、ECDSA
    RSA:非对称算法,基于RSA算法的消息摘要算法,如MD5算法
    DSA(Data Signature Algorithm)数字签名算法:DSA仅包含数字签名,不包含加解密
    ECDSA(elliptic curve digital signature algorithm) 椭圆曲线数字签名算法:速度快,强度高,签名短
RSA签名流程:
    发送方—>构建密钥对-》公布密钥给接收方—>使用私钥对数据签名-》发送签名、数据给接收方。
  接收方—》使用公钥、签名验证数据
七、加密、签名常用类
密钥生成器:KeyGenerator/KeyPairGenerator
密钥:SecretKey、KeyPair
密钥规范:DESKeySpec/SecretKeySpec/PBEKeySpec、PKCS8EncodedKeySpec/X509EncodedKeySpec
密钥工厂:SecretKeyFactory、KeyFactory
加解密:Cipher
签名:Signature
加密参数规范:PBEParameterSpec、DHParameterSpec
密钥协定(或密钥交换)协议:KeyAgreement
其他类:Security、SecureRandom
类说明:
  Security:类集中了所有的安全属性和常见的安全方法。其主要用途之一是管理提供者
  SecureRandom:提供强加密随机数生成器
  KeyGenerator:提供(对称)密钥生成器的功能
  SecretKey:(对称)密钥
  SecretKeyFactory:用于密钥、密钥规范的互转。(如KeySpec和SecretKey)
  KeyPairGenerator:用于生成公钥和私钥对
  KeyPair:简单的密钥对
  PublicKey/PrivateKey:公钥/私钥
  KeyFactory:用于密钥、密钥规范的互转。(如KeySpec、公钥私钥)
  KeyAgreement:此类提供密钥协定(或密钥交换)协议的功能。
  KeySpec:组成加密密钥的密钥内容的(透明)规范,是一个接口
  DESKeySpec:此类指定一个 DES 密钥
  SecretKeySpec:此类以与 provider 无关的方式指定一个密钥,继承了KeySpec和SecretKey,可以直接当做SecretKey使用
  PBEKeySpec:可随同基于密码的加密法 (PBE) 使用的供用户选择的密码
  PKCS8EncodedKeySpec:专用密钥的 ASN.1 编码,PKCS#8 中定义的 PrivateKeyInfo;
  X509EncodedKeySpec:进行编码的公用密钥的 ASN.1 编码,X.509 标准中定义的 SubjectPublicKeyInfo;
  Cipher:此类为加密和解密提供密码功能
  Signature:提供数字签名算法功能
  PBEParameterSpec:指定随同以密码为基础的加密法 (PBE) 使用的参数集合
  DHParameterSpec:指定随同 Diffie-Hellman 算法使用的参数集合
代码地址:https://github.com/bjlhx15/algorithm-sign.git
java-信息安全(十八)java加密解密,签名等总结的更多相关文章
- Java进阶(十八)Java实现定时器(Timer)
		
Java实现定时器(Timer) 绪 在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类.java.u ...
 - java基础(十八)----- java动态代理原理源码解析
		
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 静态代理 1.静态代理 静态代理:由程序员创建或特定工 ...
 - C#  加密(Encrypt) 解密(Decrypt)  操作类         java与 C# 可以相互加密解密
		
public sealed class EncryptUtils { #region Base64加密解密 /// <summary> /// Base64加密 /// </summ ...
 - 《java面试十八式》--引子
		
爪哇城中 “喂,你等等我啊”少女气喘吁吁的喊道 “大小姐,你可快点吧,报名马上就要结束了.” 这是爪哇城一年一度的大选比赛,被选上的人会留下来任职,享有名誉和金钱,所以大家都在积极准备. ...
 - java DES转C#DES加密解密
		
一个程序用到java的cn.core.jar加密的,需要在.NET 中解密,发现JAVA的des算法与C#的有点区别. 自己不太懂加密解密算法,所以找了个省事的方法,用IKVM.NET,用这个将cn. ...
 - DES加密 java与.net可以相互加密解密两种方法
		
DES加密 java与.net可以相互加密解密两种方法 https://www.cnblogs.com/DrWang/archive/2011/03/30/2000124.html sun.misc. ...
 - iOS使用Security.framework进行RSA 加密解密签名和验证签名
		
iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...
 - 使用 GPG 对数据进行加密解密签名
		
一:使用 GPG 对数据进行加密解密签名 基本的工具使用 1. GPG 是GNUPG 免费开源的gpg加密工具,和同pgp兼容,pgp收费. 2. 在mac上使用https://gpgtools.or ...
 - .NET Core 使用RSA算法 加密/解密/签名/验证签名
		
前言 前不久移植了支付宝官方的SDK,以适用ASP.NET Core使用支付宝支付,但是最近有好几位用户反应在Linux下使用会出错,调试发现是RSA加密的错误,下面具体讲一讲. RSA在.NET C ...
 - RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
		
原文:RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密 C#在using System.Security.Cryptograph ...
 
随机推荐
- angular ajax的使用及controller与service分层
			
一个简单的例子,控制层:.controller('publishController',['$scope','publishService', function($scope,publishServi ...
 - libui-node体验笔记
			
简介 libui-node是基于libui库的node封装.libui库是一个简便的将本地原生的GUI封装的C语言库,并支持各平台(Mac,Linux,windows).官网提供了第三方封装文档,开发 ...
 - C#导出Excel按照指定格式设置单元格属性值
			
最近项目中一直在写XML.Table.Excel之间的转化.之前一直都是不考虑格式的导出,今天给出一个格式,让按照格式导出,还真把我这新手为难了一翻,网上给出的资料基本一样.为了一个单元格文字变色纠结 ...
 - MySQL开启预编译环境
			
Mysql是默认 没有开启预编译的,需要在配置中加上 jdbc:mysql://xxx.22.11.31:3306/dbname?useServerPrepStmts=true
 - AndroidWear开发之HelloWorld篇
			
通过前一篇的学习,我们把环境都搭建好了,这下我们就可以正真的开发了. 一.创建Wear项目 通过项目创建向导一步一步下去就可以创建好一个Wear项目: 1.新建项目,一次填入应用名字,应用包名,项目位 ...
 - poj_2286 线段树
			
题目大意 在墙上贴海报,墙壁是由一排连续的瓷砖铺成,海报贴在墙壁上必须占据连续的几块瓷砖,海报可以互相覆盖,问最后可以看见几张海报(未被完全覆盖). 题目分析 墙壁是由连续的一个区间构成,每个海报占据 ...
 - Thinkphp  图形验证码无法显示
			
不显示验证码的代码: public function verify(){ $verify = new \Think\Verify(); $verify->entry(); } 修改为: publ ...
 - Codeforces 603E  Pastoral Oddities
			
传送门:http://codeforces.com/problemset/problem/603/E [题目大意] 给出$n$个点,$m$个操作,每个操作加入一条$(u, v)$长度为$l$的边. 对 ...
 - 【BZOJ4922】[Lydsy六月月赛]Karp-de-Chant Number 贪心+动态规划
			
[BZOJ4922][Lydsy六月月赛]Karp-de-Chant Number Description 卡常数被称为计算机算法竞赛之中最神奇的一类数字,主要特点集中于令人捉摸不透,有时候会让水平很 ...
 - WCF(四) 深入契约
			
服务契约中的请求-响应操作 1.请求-响应模式 [OperationContract]//1默认就是 请求-相应 Requst- Replay DateTime GetDateTime(); [Ope ...