公钥算法

RSA加密解密与加签验签

好久不见. 提交于 2019-11-29 10:14:09
RSA 加密解密与加签验签    RSA 公钥加密算法是 1977 年由罗纳德·李维斯特( Ron Rivest )、阿迪·萨莫尔( Adi Shamir )和伦纳德·阿德曼( Leonard Adleman )一起提出的。 1987 年 7 月首次在美国公布,当时他们三人都在麻省理工学院工作实习。 RSA 就是他们三人姓氏开头字母拼在一起组成的。    RSA 是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被 ISO 推荐为公钥数据加密标准。    RSA 公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。   在公开密钥密码体制中,加密密钥(即公开密钥) PK 是公开信息,而解密密钥(即秘密密钥) SK 是需要保密的。加密算法 E 和解密算法 D 也都是公开的。虽然解密密钥 SK 是由公开密钥 PK 决定的,但却不能根据 PK 计算出 SK 。   基于这种理论, 1978 年出现了著名的 RSA 算法,它通常是先生成一对 RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可以在网络服务器中注册。为提高保密强度, RSA 密钥至少为 500 位长,一般推荐使用 1024 位。这就使加密的计算量很大。    RSA

ECC公钥格式详解

可紊 提交于 2019-11-29 08:05:12
ECC公钥格式详解 https://www.cnblogs.com/xinzhao/p/8963724.html 本文首先介绍公钥格式相关的若干概念/技术,随后以示例的方式剖析DER格式的ECC公钥,最后介绍如何使用Java生成、解析和使用ECC公钥。 ASN.1 Abstract Syntax Notation One (ASN.1) 是一种接口描述语言,提供了一种平台无关的描述数据结构的方式。ASN.1是ITU-T、ISO、以及IEC的标准,广泛应用于电信和计算机网络领域,尤其是密码学领域。 ASN.1与大家熟悉的 Protocol Buffers 和 Apache Thrift 非常相似,都可以通过schema来定义数据结构,提供跨平台的数据序列化和反序列化能力。不同的是,ASN.1早在1984年就被定为标准,比这两者要早很多年,并得到了广泛的应用,被用来定义了很多世界范围内广泛使用的数据结构,有大量的RFC文档使用ASN.1定义协议、数据格式等。比如https所使用的X.509证书结构,就是使用ASN.1定义的。 ASN.1定义了若干基础的数据类型和结构类型: Topic Description Basic Types BIT STRING BOOLEAN INTEGER NULL OBJECT IDENTIFIER OCTET STRING String Types

Jwt认识与攻击

假如想象 提交于 2019-11-29 06:17:28
今天看到2018强网杯的题目,因此总结一下。 Json Web Token Json Web Token简称jwt 那么怎么样可以让HTTP记住曾经发生的事情呢? 这里的选择可以很多:cookie,session,jwt 对于一般的cookie,如果我们的加密措施不当,很容易造成信息泄露,甚至信息伪造,这肯定不是我们期望的。 那么对于session呢? 对于session:客户端在服务端登陆成功之后,服务端会生成一个sessionID,返回给客户端,客户端将sessionID保存到cookie中,例如phpsessid,再次发起请求的时候,携带cookie中的sessionID到服务端,服务端会缓存该session(会话),当客户端请求到来的时候,服务端就知道是哪个用户的请求,并将处理的结果返回给客户端,完成通信。 但是这样的机制会存在一些问题: 1、session保存在服务端,当客户访问量增加时,服务端就需要存储大量的session会话,对服务器有很大的考验; 2、当服务端为集群时,用户登陆其中一台服务器,会将session保存到该服务器的内存中,但是当用户的访问到其他服务器时,会无法访问,通常采用缓存一致性技术来保证可以共享,或者采用第三方缓存来保存session,不方便。 所以这个时候就需要jwt了 在身份验证中,当用户使用他们的凭证成功登录时,JSON Web

Java加密技术(十二)——*.PFX(*.p12)&个人信息交换文件

旧巷老猫 提交于 2019-11-29 01:01:13
今天来点实际工作中的硬通货! 与计费系统打交道,少不了用到加密/解密实现。为了安全起见,通过非对称加密交换对称加密密钥更是不可或缺。那么需要通过什么载体传递非对称算法公钥/私钥信息?数字证书是公钥的载体,而密钥库可以包含公钥、私钥信息。 JKS 和 PKCS#12 都是比较常用的两种密钥库格式/标准。对于前者,搞Java开发,尤其是接触过HTTPS平台的朋友,并不陌生。 JKS 文件(通常为*.jks或*.keystore,扩展名无关)可以通过Java原生工具——KeyTool生成;而后者 PKCS#12 文件(通常为*.p12或*.pfx,意味个人信息交换文件),则是通过更为常用的OpenSSL工具产生。 当然,这两者之间是可以通过导入/导出的方式进行转换的!当然,这种转换需要通过KeyTool工具进行! 回归正题,计费同事遇到一个难题:合作方交给他们一个*.pfx文件,需要他们从中提取密钥,然后进行加密交互。其实,通过Java直接操作密钥库文件(或个人信息交换文件)对于一般Java开发人员来说,这都是个冷门。不接触数字安全,根本不知所云。况且,Java原生的密钥库文件格式为JKS,如何操作*.pfx文件?密钥库操作需要获知密钥库别名,*.pfx别名是什么?!接下来就解决这些问题! 方案: 通过keytool密钥库导入命令importkeystore,将密钥库格式由PKCS

git安装和使用配置

我只是一个虾纸丫 提交于 2019-11-29 00:30:15
1、简介 Git是一个开源的分布式版本控制系统,能用于快速高效地处理任何或小或大的项目,它是Linus Torvalds为了帮助管理Linux内核开发而开发的一个源码开放的版本控制软件。 2、Linux平台安装git Git的工作需要调用curl、zlib、openssl等库的代码,因此在安装git之前需要安装这些依赖库,在Linux系统上使用apt-get或yum命令进行安装。 (1)命令行安装 首先安装库依赖: $ sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \   libz-dev libssl-dev 然后继续安装git: $ sudo apt-get install git 安装完成后查看git的版本号: $ git --version 如下正常显示出版本号,则git安装完成: (2)源码安装 我们也可以通过Git的源码进行安装,先去Git官网下载最新版本源码,链接如下: https://git-scm.com/download 解压并安装下载的源码包: $ mv git-2.23.0.tar.gz ~/github/ $ cd ~/github/ $ tar -zxvf git-2.23.0.tar.gz $ cd git-2.23.0/ $ make prefix=/usr/local

SSH linux远程免密登陆

巧了我就是萌 提交于 2019-11-29 00:03:42
~/.ssh/authorized_keys 文件内存入公钥.pub,退出后登陆即生效 PS: 1. 创建SSH密钥对 ssh-keygen -t rsa 指定算法 -f 指定密钥存储的文件。 2. 原理 本机收到随机字符,私钥加密,linux用公钥解密后确认是否OK。 来源: https://www.cnblogs.com/GW977/p/11433568.html

我爱java系列之---【JWT令牌】

ぐ巨炮叔叔 提交于 2019-11-28 22:53:34
JWT令牌的优点: 1、jwt基于json,非常方便解析。 2、可以在令牌中自定义丰富的内容,易扩展。 3、通过非对称加密算法及数字签名技术,JWT防止篡改,安全性高。 4、资源服务使用JWT可不依赖认证服务即可完成授权。 缺点: 1、JWT令牌较长,占存储空间比较大。 令牌结构: JWT令牌由三部分组成,每部分中间使用点(.)分隔,比如:xxxxx.yyyyy.zzzzz Header 头部包括令牌的类型(即JWT)及使用的哈希算法(如HMAC SHA256或RSA) 一个例子如下: 下边是Header部分的内容 { "alg": "HS256", "typ": "JWT"} 将上边的内容使用Base64Url编码,得到一个字符串就是JWT令牌的第一部分。 Payload 第二部分是负载,内容也是一个json对象,它是存放有效信息的地方,它可以存放jwt提供的现成字段,比 如:iss(签发者),exp(过期时间戳), sub(面向的用户)等,也可自定义字段。 此部分不建议存放敏感信息,因为此部分可以解码还原原始内容。 最后将第二部分负载使用Base64Url编码,得到一个字符串就是JWT令牌的第二部分。 一个例子: { "sub": "1234567890", "name": "456", "admin": true} Signature 第三部分是签名

Linux笔记 SSH服务

早过忘川 提交于 2019-11-28 22:28:44
一、概要 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。SSH是专为远程登录会话和其他网络服务提供的安全性协议。利用 SSH 协议可以有效的防止远程管理过程中的信息泄露问题,在当前的生产环境运维工作中,绝大多数企业普遍采用SSH协议服务来代替传统的不安全的远程联机服务软件,如telnet(23端口,非加密的)等。 在默认状态下,SSH服务主要提供两个服务功能:   提供类似telnet远程联机服务器的服务,即上面提到的 SSH服务 。   类似FTP服务的sftp-server,借助SSH协议来传输数据的。提供更安全的 SFTP服务 (vsftp,proftp)。 二、认证过程 1.认证分类与说明 >>>主机验证: 通过主机验证,再通过该主机上的用户验证,就能唯一确定该用户的身份;一个主机上可以有很多用户,所以每台主机的验证只需一次,但主机上每个用户都需要单独进行用户验证; >>>身份验证: 一个主机上可以有很多用户,所以每台主机的验证只需一次,但主机上每个用户都需要单独进行用户验证   常用身份验证方法:ssh支持多种身份验证,最常用的是 密码验证机制和公钥认证机制

CA证书和TLS介绍

拥有回忆 提交于 2019-11-28 21:01:46
数字签名 用自己的私钥给数据加密就叫数字签名 公钥传输威胁 在A和B的通信中,C可以把自己的公钥发给A,让A把C的公钥当成B的公钥,这样的话.B拿到加密数据反而无法解密,而C却可以解密出数据.从而实现C截获AB之间的数据 所以在两者的通信中必须要对公钥的来源进行确认 A和B如果想安全交换公钥,就必须通过CA(证书颁发机构) 证书的通信过程 A和B首先都内置了CA的公钥 根CA的证书是自己给自己签名的(自签名) CA和证书 PKI: Public Key Infrastructure 签证机构:CA(Certificate Authority) 注册机构:RA 证书吊销列表:CRL 证书存取库: X.509:定义了证书的结构以及认证协议标准 版本号 序列号 签名算法 颁发者 有效期限 主体名称 主体公钥 CRL分发点 扩展信息 发行者签名 SSL SSL(Secure Socket Layer)和TLS(Transport Layer Security )本身是一个东西 实现功能: 机密性 认证 完整性 重放保护(正确同样的数据不能重复发送) 两阶段协议,分为握手阶段和应用阶段 握手阶段(协商阶段): 客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行 身份认证),并协商通信中使用的安全参数、密码套件以及主密钥. 后续通信使用的所有密钥都是

https原理和如何配置https

别等时光非礼了梦想. 提交于 2019-11-28 19:38:55
参考: https://blog.51cto.com/11883699/2160032 上面说的已经很好地,我这里简单做个总结: 在网上我们做数据交互时候一般用的http协议,但是这种方式会使得交互内容明文化,很不安全,后来人们就想讲这个过程加密。 1)对于加密算法有对称加密和得对称加密算法,如果用对称加密算法加密客户端与服务端信息交互,方式:客户端给服务端发请求,服务端给客户端A回复使用对称秘钥A,客户端接收到对称秘钥A后回复知道了,之后客户端A就用对称秘钥A加密与服务端交互信息;同样服务端会给客户端B发送对称秘钥B,于此类推。但是这个过程中存在一个问题:对于这个秘钥协商的过程,是明文的,如果被第三方拦截,之后的操作在这个第三方面前都是明文的了 2) 为了解决1)中秘钥协商过程的明文容易被拦截获取,需要想个办法加密这一过程,于是乎我们可以用非对称秘钥加密算法( 私钥加密后的密文,只要是公钥,都可以解密,但是反过来公钥加密后的密文,只有私钥可以解密。私钥只有一个人有,而公钥可以发给所有的人 )来处理这一过程,具体方案:客户端A给服务端发送请求,服务端给客户端A发送一个非对称加密算法的公钥,自己留一个私钥,客户端获得这个公钥后,用这个公钥给服务器发送信息(包含对称加密算法,对称秘钥等信息),服务端收到消息解密获得对象消息,并用收到的对称加密算法加密信息给客户端发送收到了