一、基本概念

加密:

  密码常用术语: 明文,密文,加密,加密算法,加密秘钥,解密,解密算法,解密秘钥,
  密码分析:分析密文从而推断出明文或秘钥的过程
  主动攻击:入侵密码系统,采用伪造,修改,删除等手段向系统注入假消息进行欺骗。(对密文有破坏作用)
  被动攻击:对一个保密系统采取截获密文并对其进行分析和攻击。(对密文没有破坏作用)
  密码体制:由明文/密文/密钥空间,加密算法和解密算法五部分构成
  密码协议:也称安全协议,以密码学为基础的消息交换通信协议
  密码系统:指用于加密、解密的系统。
  柯克霍夫原则:密码的安全基于密钥而不是算法的保密。现代密码学设计的基本原则

密码分类:

  古典密码:以字符块为基本加密单元;现代密码:以信息块为基本加密单元
  受限算法:保密性基于算法,应用军事,属于古典密码;基于密钥算法:算法公开,密钥保密。属于现在密码。
  对称密码:加解密密钥相同;非对称密码:密钥分为公钥私钥。
  分组密码:明文分组,对每块加密;流密码:也称序列密码,每次加密一位或一个字节。
  散列函数:用来验证数据的完整性,长度不限,哈希值容易算,运算过程不可逆。如,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加密解密,签名等总结的更多相关文章

  1. Java进阶(十八)Java实现定时器(Timer)

    Java实现定时器(Timer) 绪 在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类.java.u ...

  2. java基础(十八)----- java动态代理原理源码解析

    关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 静态代理 1.静态代理 静态代理:由程序员创建或特定工 ...

  3. C# 加密(Encrypt) 解密(Decrypt) 操作类 java与 C# 可以相互加密解密

    public sealed class EncryptUtils { #region Base64加密解密 /// <summary> /// Base64加密 /// </summ ...

  4. 《java面试十八式》--引子

    爪哇城中   “喂,你等等我啊”少女气喘吁吁的喊道   “大小姐,你可快点吧,报名马上就要结束了.”   这是爪哇城一年一度的大选比赛,被选上的人会留下来任职,享有名誉和金钱,所以大家都在积极准备. ...

  5. java DES转C#DES加密解密

    一个程序用到java的cn.core.jar加密的,需要在.NET 中解密,发现JAVA的des算法与C#的有点区别. 自己不太懂加密解密算法,所以找了个省事的方法,用IKVM.NET,用这个将cn. ...

  6. DES加密 java与.net可以相互加密解密两种方法

    DES加密 java与.net可以相互加密解密两种方法 https://www.cnblogs.com/DrWang/archive/2011/03/30/2000124.html sun.misc. ...

  7. iOS使用Security.framework进行RSA 加密解密签名和验证签名

    iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...

  8. 使用 GPG 对数据进行加密解密签名

    一:使用 GPG 对数据进行加密解密签名 基本的工具使用 1. GPG 是GNUPG 免费开源的gpg加密工具,和同pgp兼容,pgp收费. 2. 在mac上使用https://gpgtools.or ...

  9. .NET Core 使用RSA算法 加密/解密/签名/验证签名

    前言 前不久移植了支付宝官方的SDK,以适用ASP.NET Core使用支付宝支付,但是最近有好几位用户反应在Linux下使用会出错,调试发现是RSA加密的错误,下面具体讲一讲. RSA在.NET C ...

  10. RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密

    原文:RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密 C#在using System.Security.Cryptograph ...

随机推荐

  1. POJ 3093 Margaritas(Kind of wine) on the River Walk (背包方案统计)

    题目 Description One of the more popular activities in San Antonio is to enjoy margaritas in the park ...

  2. ftplib模块【python】

    转自:http://www.cnblogs.com/kaituorensheng/p/4480512.html 函数释义 Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实 ...

  3. 使用命令wsimport构建WebService客户端

    原文:http://www.cnblogs.com/ningvsban/p/3760085.html wsimport命令介绍 在JDK的bin文件夹中,有一个wsimport.exe,这个工具依据w ...

  4. 查看内存使用情况:free

    free命令用于显示内存的使用情况,常见用法如下: [root@localhost ~]$ free # 以KB为单位显示内存使用情况 [root@localhost ~]$ free -m # 以M ...

  5. 编写一个读写倾斜测量数据.s3c文件格式的OSG插件osgdb_s3c

    VS新建一个空的DLL工程 ReaderWriterS3C.cpp源文件 #include <osg/Notify> #include <osgDB/FileNameUtils> ...

  6. MFC-TCP连接代码片段(支援大富的)

    BOOL CClientSocketTestDlg::OnInitDialog() { CDialogEx::OnInitDialog(); ........................ // T ...

  7. 关于MCU的烧录,下载与其他接口的比较(一)

    今天呢,犯了一个很严重的错误,我不知道这会产生什么样的影响,但我知道,如果我以后再没有具体的了解,仔细认真地观察,认证,只会滑到无底的深渊.做技术来不得半点虚假,切记一知半解,凡事都要弄得清楚明白,认 ...

  8. stl中的map经验

    如果想使用一个map临时变量装载参数map,不需要使用new创建一个对象. 声明一个变量,直接赋值就可以.map内部自己重载了=操作符,会自己分配内存.

  9. cocos2dx游戏--欢欢英雄传说--为敌人添加移动和攻击动作

    这里主要为敌人添加了一个移动动作和攻击动作.移动动作是很简略的我动他也动的方式.攻击动作是很简单的我打他也打的方式.效果:代码: #ifndef __Progress__ #define __Prog ...

  10. cache buffers chains以及热块解决方案

    cache buffers chains以及热块解决方案 今天是2013-10-10,今天下午我调休了,中午饭过后从14点一直睡到16点,这种感觉真爽.  之前学习过关于buffer cache的ca ...