对称密钥

(转) 详解公钥、私钥、数字证书的概念

徘徊边缘 提交于 2019-12-04 04:32:08
加密和认证   首先我们需要区分加密和认证这两个基本概念。   加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击。其重点在于数据的安全性。身份认证是用来判断某个身份的真实性,确认身份后,系统才可以依不同的身份给予不同的权限。其重点在于用户的真实性。两者的侧重点是不同的。 公钥和私钥 公钥和私钥就是俗称的不对称加密方式,是从以前的对称加密(使用用户名与密码)方式的提高。 在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是非对称密钥密码系统,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。   公钥私钥的原则: 一个公钥对应一个私钥。 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。 用电子邮件的方式说明一下原理。 使用公钥与私钥的目的就是实现安全的电子邮件,必须实现如下目的: 1. 我发送给你的内容必须加密,在邮件的传输过程中不能被别人看到。 2. 必须保证是我发送的邮件,不是别人冒充我的。 要达到这样的目标必须发送邮件的两人都有公钥和私钥。 公钥

分组密码体制【密码学笔记】

与世无争的帅哥 提交于 2019-12-04 01:58:36
分组密码的基本概念 ​ 分组密码在加密过程中不是将明文按字符逐位加密,而是首先要将待加密的明文进行分组,每组的长度相同,然后对每组明文分别加密得到密文。加密和解密过程采用相同的密钥,称为对称密码体制。 ​ 例如将明文分为 \(m\) 块: \(P_{0},P_{1},P_2,…,P_{m-1}\) ,每个块在密钥作用下执行相同的变换,生成 \(m\) 个密文块: \(C_0,C_1,C_2,…,C_{m-1}\) ,每块的大小可以是任意长度,但通常是每块的大小大于等于64位(块大小为1比特位时,分组密码就变为序列密码)。 如下图所示是通信双方最常用的分组密码基本通信模型。 ​ 一个分组密码系统(Block Cipher System,简称BCS)可以用一个五元组来表示: \(BCS=\{P,C,K,E,D\}\) 。其中,P(plaintext)、C(ciphertext)、K(key)、E(encryption)、D(decode)分别代表明文空间、密文空间、密钥空间、加密算法、解密算法。 设 \(X=\{x_0,x_1,…,x_{n-2},x_{n-1}\}\) 为一组长度为 \(n\) 的明文块,在密钥 \(K=\{k_0,k_1,…,k_{t-1}\}\) 的加密作用下得到密文块 \(Y=\{y_0,y_1,…,y_{m-2},y_{m-1}\}\) ,其中 \(x_i,y

RSA签名与验签

谁说胖子不能爱 提交于 2019-12-03 22:52:47
RSA签名与验签 之前看过RSA加密算法的一些介绍,对RSA加密的原理有一些了解。其实刚刚挺熟非对称加密时是觉得很神奇的。通常对称加密很好理解,比如原理是ANA,我们将每个字母后移一位,那么就是BOB了,这就是很简单的加密过程(上帝ana就变成了凡人bob了,只有dota玩家才知道的梗)。解密就将每个字母前移一位。如果把移动的位数看成密钥,那么密钥就是1。加密和解密密钥是一样的。 刚好最近项目中使了RSA签名,在此记录下。 项目使用 目前项目中是使用RSA的签名与验签功能。第三方发送文件给我们,同时会发送该文件的摘要(SHA256)信息,而摘要信息是使用私钥签名过的。我们将收到的文件做摘要(SHA256),然后使用公钥进行验签。如果签名验证通过才能认为文件是可信的。 问题 项目组的同事在开发好后想测试一下,但是发现第三方只提供了一个样例文件,而且文件内容还是不符合业务要求的。没办法验证整个流程。 其实解决方式很简单: 替换公钥 。 生成密钥对 第三方提供的公钥是一个没有后缀名的文件,使用文本编辑器打开是乱码的,可以猜测是二进制文件。看了第三方提供的代码,是直接从文件中读取byte数据,然后构建一个PublicKey。 然后我尝试生成自己的密钥对,一开始我使用的是Xshell。因为SSH是支持RSA加密的,一般的SSH工具都支持生成RSA密钥。 Xshell 打开Xshell 点击

微信小程序的登入与授权

喜欢而已 提交于 2019-12-03 20:44:30
官方文档: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 小程序登录 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系。 登录流程 说明: 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。 调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。 之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。 注意: 会话密钥 session_key 是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。 临时登录凭证 code 只能使用一次 小程序端执行wx.login后在回调函数中就能拿到上图的code,然后把这个code传给我们后端程序,后端拿到这个这个code后,可以请求code2Session接口拿到用的openid和session_key,openid是用户在微信中唯一标识,我们就可以把这个两个值(val)存起来,然后返回一个键(key)给小程序端,下次小程序请求我们后端的时候,带上这个key

PHP非对称加密

[亡魂溺海] 提交于 2019-12-03 16:56:05
加密的类型: 在日常设计及开发中,为确保数据传输和数据存储的安全,可通过特定的算法,将数据明文加密成复杂的密文。目前主流加密手段大致可分为单向加密和双向加密。 单向加密:通过对数据进行摘要计算生成密文,密文不可逆推还原。算法代表:Base64,MD5,SHA; 双向加密:与单向加密相反,可以把密文逆推还原成明文,双向加密又分为对称加密和非对称加密。 对称加密:指数据使用者必须拥有相同的密钥才可以进行加密解密,就像彼此约定的一串暗号。算法代表:DES,3DES,AES,IDEA,RC4,RC5; 非对称加密:相对对称加密而言,无需拥有同一组密钥,非对称加密是一种“信息公开的密钥交换协议”。非对称加密需要公开密钥和私有密钥两组密钥,公开密钥和私有密钥是配对起来的,也就是说使用公开密钥进行数据加密,只有对应的私有密钥才能解密。这两个密钥是数学相关,用某用户密钥加密后的密文,只能使用该用户的加密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个密钥性质。这里把公开的密钥为公钥,不公开的密钥为私钥。算法代表:RSA,DSA。   以前一直对客户端传给服务器的信息加密这一块一脸懵,如果app里面的用户登录信息被抓包拿到了,大写着 username:root,password:123456, 那不是很尴尬。

加密和安全

易管家 提交于 2019-12-03 10:18:04
墨菲定律 墨菲定律:一种心理学效应,是由爱德华·墨菲(Edward A. Murphy)提出的, 原话:如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导 致灾难,则必定有人会做出这种选择 主要内容: 任何事都没有表面看起来那么简单 所有的事都会比你预计的时间长 会出错的事总会出错 如果你担心某种情况发生,那么它就更有可能发生 安全机制 信息安全防护的目标 保密性 Confidentiality 完整性 Integrity:数据确定完好,不能被篡改 可用性 Usability:read5(高可用性)系统的总体运行时间占全部时间的百分比,百分比越 高,可用性越高,百分比按年计算,%99.9 当机10小时 可控制性Controlability 不可否认性 Non-repudiation 安全防护环节 物理安全:各种设备/主机、机房环境 系统安全:主机或设备的操作系统 应用安全:各种网络服务、应用程序 (文件共享) 网络安全:对网络访问的控制、防火墙规则(iptables -vnL iptables -F) 数据安全:信息的备份与恢复、加密解密 管理安全:各种保障性的规范、流程、方法 安全攻击: STRIDE 1 Spoofing 假冒 (钓鱼网站,可以通过看域名辨别) 2 Tampering 篡改 (发邮件给tom mail -s test tom .或者ctrl

常见的加密

倾然丶 夕夏残阳落幕 提交于 2019-12-03 04:23:20
加密:在网络传输中,如果我们传输明文,会被人给截取,从而数据泄露。我们可以对他们进行加密 加密分为2大类,对称加密和非对称加密。 对称加密:对称加密就是加密和解密公用一个密钥。 DES:对称加密,速度较快,适用于加密大型数据的场合。 public class DesUtil { private final static String DES = "DES"; private final static String ENCODE = "UTF-8"; private final static byte[] ivByte= {1,2,3,4,5,6,7,8}; // 算法名称/加密模式/填充方式 public static final String CIPHER_ALGORITHM = "DES/CBC/PKCS5Padding"; //主要看填充方式 PKCS5Padding PKCS7Padding 还有其他的填充方式没用过 // public static final String CIPHER_ALGORITHM_CBC = "DES/CBC/ZerosPadding"; public static void main(String[] args) throws Exception { String data="123456"; String timeSend=

SSL与TLS的不同

陌路散爱 提交于 2019-12-03 04:03:13
SSL 与 TLS 1 SSL (Secure Socket Layer,安全套接字层) SSL为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取,当前为3.0版本。 SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。 2 TLS (Transport Layer Security,传输层安全协议) 用于两个应用程序之间提供保密性和数据完整性。 TLS 1.0是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本,可以理解为SSL 3.1,它是写入了 RFC 的。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。 3 SSL

SSL握手通信详解及linux下c/c++ SSL Socket代码举例

牧云@^-^@ 提交于 2019-12-03 00:51:08
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。 安全证书既包含了用于加密数据的密钥,又包含了用于证实身份的数字签名。安全证书采用公钥加密技术。公钥加密是指使用一对非对称的密钥进行加密或解密。每一对密钥由公钥和私钥组成。公钥被广泛发布。私钥是隐秘的,不公开。用公钥加密的数据只能够被私钥解密。反过来,使用私钥加密的数据只能被公钥解密。这个非对称的特性使得公钥加密很有用。在安全证书中包含着一对非对称的密钥。只有安全证书的所有者才知道私钥。当通信方A将自己的安全证书发送给通信方B时,实际上发给通信方B的是公开密钥,接着通信方B可以向通信方A发送用公钥加密的数据,只有通信方A才能使用私钥对数据进行解密,从而获得通信方B发送的原始数据。安全证书中的数字签名部分是通信方A的电子身份证。数字签名告诉通信方B该信息确实由通信方A发出,不是伪造的,也没有被篡改。 客户与服务器通信时,首先要进行SSL握手,SSL握手主要完成以下任务: 1)协商使用的加密套件。加密套件中包括一组加密参数,这些参数指定了加密算法和密钥的长度等信息。 2)验证对方的身份,此操作是可选的。 3)确定使用的加密算法。 4

Android 加密算法归纳

匿名 (未验证) 提交于 2019-12-03 00:33:02
密钥:分为加密密钥和解密密钥。 明文:没有进行加密,能够直接代表原文含义的信息。 密文:经过加密处理处理之后,隐藏原文含义的信息。 加密:将明文转换成密文的实施过程。 解密:将密文转换成明文的实施过程。 密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。 为安全框架提供类和接口,如解析和管理证书、密钥生成、算法参数。 java.security java.security.acl java.security.cert java.security.interfaces java.security.spec 2.为加密操作提供类和接口,如加密操作包括加密,密钥生成和密钥协议以及消息认证码(MAC)生成。 支持加密包括对称,非对称,块和流密码。 javax.crypto javax.crypto.interfaces javax.crypto.spec 可参考谷歌开发者文档: https://developer.android.com/reference/packages Base64 Base64只是一种编码方式,将二进制数据转化为字符