对称密钥

【转帖】HTTPS 详解一:附带最精美详尽的 HTTPS 原理图

孤街醉人 提交于 2020-01-25 00:50:01
HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 https://segmentfault.com/a/1190000021494676 前言 作为一个有追求的程序员,了解行业发展趋势和扩充自己的计算机知识储备都是很有必要的,特别是一些计算机基础方面的内容,就比如本篇文章要讲的计算机网络方面的知识。本文将为大家详细梳理一下 HTTPS 的实现原理。 近年来,随着用户和互联网企业安全意识的提高和 HTTPS 成本的下降,HTTPS 已经越来越普及。很多互联网巨头也在力推 HTTPS,比如谷歌的 Chrome 浏览器在访问 HTTP 网站时会在地址栏显示不安全的提醒,微信要求所有的小程序必须使用 HTTPS 传输协议,苹果也要求所有在 App Store 上架的应用必须采用 HTTPS ,国内外的大部分主流网站也都已迁移至 HTTPS,可见 HTTPS 全面取代 HTTP 只是时间问题。 说了这么多,究竟什么是 HTTPS,它与 HTTP 相比有什么优缺点?其底层原理又是怎么实现的呢?下面就为你一一解答,先来看一下 HTTP 的弊端吧。 1、HTTP 的最大弊端——不安全 HTTP 之所以被 HTTPS 取代,最大的原因就是不安全,至于为什么不安全,看了下面这张图就一目了然了。 图1. HTTP数据传输过程 由图可见,HTTP 在传输数据的过程中,所有的数据都是明文传输

移动通信安全——移动通信系统的安全基础

巧了我就是萌 提交于 2020-01-24 09:54:36
加密算法 1、加密的两种方法:   对称(私钥)密码体制   非对称(公钥)密码体制 2、对称密码体制   加密密钥与解密密钥相同   保密强度高,但密钥管理难且可抵赖   从加密模式来看,分为两类:   a、序列密码   有限状态机产生伪随机序列——>使用该序列逐比特加密信息流   b、分组密码   明文按照固定长度分组——>用固定长度密钥单独加密每个分组   分组算法:DES、3DES、IDEA、IDEA、Skip-jack、Safer-64、LOK189、Shark 3、非对称加密体制   加密密钥(公开密钥)与解密密钥(专用密钥)不同   基本过程:A生成一对密钥——>公开其中的公开密钥PK——>C使用PK加密并将密文发送给A——>A用其中的专用密钥ZK解密   非对称密码体制中的每个用户都有一对选定的密钥   非对称密码体制,密钥管理简单,不可抵赖,但所需密钥长度较长,处理速度较慢 WPKI    1、PKI:公钥基础设施   PKI系统:提供公钥加密和数字签名的系统   数字证书组成:用户身份,用户公钥,认证中心的数字签名 2、PKI系统的组成:认证中心CA、注册中心RA、证书库、客户端软件   a、认证中心   验证用户身份——>对含有用户身份与公钥的数据结构数字签名,捆绑用户身份和密钥——>生成公钥证书   根证书:直接被用户终端信任的CA  

HTTP杂谈

别等时光非礼了梦想. 提交于 2020-01-24 05:03:31
HTTP 协议 HTTP请求和响应步骤 以上完整表示了HTTP请求和响应的7个步骤,下面从TCP/IP协议模型的角度来理解HTTP请求和响应如何传递的。 TCP/IP协议 TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议,通过20多年的发展已日渐成熟,并被广泛应用于局域网和广域网中,目前已成为事实上的国际标准。TCP/IP协议簇是一组不同层次上的多个协议的组合,通常被认为是一个四层协议系统,与OSI的七层模型相对应。 HTTP协议就是基于TCP/IP协议模型来传输信息的。 (1). 链路层 也称作数据链路层或网络接口层(在第一个图中为网络接口层和硬件层),通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。ARP(地址解析协议)和RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换IP层和网络接口层使用的地址。 (2). 网络层 也称作互联网层(在第一个图中为网际层),处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议

如何保护你的 Python 代码 (一)—— 现有加密方案

独自空忆成欢 提交于 2020-01-23 00:33:08
https://zhuanlan.zhihu.com/p/54296517 0 前言 去年11月在PyCon China 2018 杭州站分享了 Python 源码加密 ,讲述了如何通过修改 Python 解释器达到加解密 Python 代码的目的。然而因为笔者拖延症发作,一直没有及时整理成文字版,现在终于战胜了它,才有了本文。 本系列将首先介绍下现有源码加密方案的思路、方法、优点与不足,进而介绍如何通过定制 Python 解释器来达到更好地加解密源码的目的。 由于 Python 的动态特性和开源特点,导致 Python 代码很难做到很好的加密。社区中的一些声音认为这样的限制是事实,应该通过法律手段而不是加密源码达到商业保护的目的;而还有一些声音则是不论如何都希望能有一种手段来加密。于是乎,人们想出了各种或加密、或混淆的方案,借此来达到保护源码的目的。 常见的源码保护手段有如下几种: 发行 .pyc 文件 代码混淆 使用 py2exe 使用 Cython 下面来简单说说这些方案。 1 发行 .pyc 文件 1.1 思路 大家都知道,Python 解释器在执行代码的过程中会首先生成 .pyc 文件,然后解释执行 .pyc 文件中的内容。当然了,Python 解释器也能够直接执行 .pyc 文件。而 .pyc 文件是二进制文件,无法直接看出源码内容。如果发行代码到客户环境时都是

AES加密(java和C#)

孤街浪徒 提交于 2020-01-21 22:26:45
需求:Java和C#进行数据交互,互相采用AES/CBC/PKCS5Padding进行加解密 Java加密和解密的代码如下: /** * 加密 1.构造密钥生成器 2.根据 ecnodeRules 规则初始化密钥生成器 3.产生密钥 4.创建和初始化密码器 5.内容加密 6.返回字符串 * @param encodeRules 密钥规则,类似于密钥 * @param content 待加密内容 * @return */ public static String AESEncode(String encodeRules, String content) { // 初始化向量,必须 16 位 String ivStr = "AESCBCPKCS5Paddi"; try { // 1.构造密钥生成器,指定为 AES 算法,不区分大小写 KeyGenerator keygen = KeyGenerator.getInstance("AES"); // 新增下面两行,处理 Linux 操作系统下随机数生成不一致的问题 SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); secureRandom.setSeed(encodeRules.getBytes()); keygen.init(128,

总结HTTPS握手层和加密层

泪湿孤枕 提交于 2020-01-20 19:27:21
前面说过,TLS/SSL协议可以和应用层协议结合,例如HTTP,SMTP和FTP等。提供数据完整性和机密性TLS/SSL协议建立在TCP或UDP之上,应用层协议之下,任何应用层协议使用了TLS,都要先把数据经过TLS/SSL处理。客户端浏览器连接服务器的443端口,发送HTTP数据到TLS/SSL协议,再到传输层TCP处。TLS协议部分有握手层和加密层两部分,握手层在上,加密层在下,握手层负责完成密码套件,也就是使用的加密算法,密钥参数生成和交换,发送证书等,最后完成密钥协商得到预备主密钥,预备主密钥用过密钥衍生算法得到主密钥,之后就可以把这它交给下面的加密层,完成数据加密和解密。加密层的功能顾名思义,在拿到握手层提供的主密钥后,对HTTP数据提供完整性和机密性保证。 握手层和加密层流程 在握手层,负责交换随机数,密钥套件和密钥协商等,无论是RSA还是DH方式,首先都是客户端发送自己支持的密码套件给服务器,服务器从中选择一个密钥套件,完成密码套件的协商,然后服务器端发送自己的证书给客户端进行身份验证,客户端完成身份验证后,可以开始密钥协商。RSA密钥协商,客户端直接把加密后的预备主密钥发送给服务器端,DH密钥协商则先由服务器端发送DH参数和DH公钥给客户端,客户端根据DH参数生成自己的密钥对,再把客户端DH公钥发送给服务器端,完成密钥协商。接下来就可以在通信中进行数据的加密和解密。

加密与安全

泪湿孤枕 提交于 2020-01-19 17:49:08
一, URL 编码 为什么要使用 URL 编码? 我们都知道Http协议中参数的传输是 "key=value" 这种简直对形式的,如果要传多个参数就需要用 “&” 符号对键值对进行分割。如 "?name1=value1&name2=value2" ,这样在服务端在收到这种字符串的时候,会用 “&” 分割出每一个参数,然后再用 “=” 来分割出参数值。 现在有这样一个问题,如果我的参数值中就包含=或&这种特殊字符的时候该怎么办。 比如说 “name1=value1” ,其中value1的值是 “va&lu=e1” 字符串,那么实际在传输过程中就会变成这样 “name1=va&lu=e1” 。我们的本意是就只有一个键值对,但是服务端会解析成两个键值对,这样就产生了奇异。 如何解决上述问题带来的歧义呢?解决的办法就是对参数进行URL编码? URL编码只是简单的在特殊字符的各个字节前加上%,例如,我们对上述会产生奇异的字符进行URL编码后结果: “name1=va%26lu%3D” ,这样服务端会把紧跟在“%”后的字节当成普通的字节,就是不会把它当成各个参数或键值对的分隔符。 类似于这种 实际操作 public static void main(String[] args) { //url编码 String str="测试"; String urlStr=URLEncoder.encode

使用truelicense实现用于JAVA工程license机制(包括license生成和验证)

梦想的初衷 提交于 2020-01-19 04:25:41
开发的软件产品在交付使用的时候,往往会授权一段时间的试用期,这个时候license就派上用场了。不同于在代码中直接加上时间约束,需要重新授权的时候使用license可以避免修改源码,改动部署,授权方直接生成一个新的license发送给使用方替换掉原来的license文件即可。下面将讲述使用truelicense来实现license的生成和使用。Truelicense是一个开源的证书管理引擎,详细介绍见 https://truelicense.java.net/ [此地址已不可用(苏醒若蘅注)] 一、首先介绍下license授权机制的原理: 1、 生成密钥对,方法有很多。 2、 授权者保留私钥,使用私钥对包含授权信息(如使用截止日期,MAC地址等)的license进行数字签名。 3、 公钥给使用者(放在验证的代码中使用),用于验证license是否符合使用条件。 接下来是本例制作license的具体步骤: 二、第一步:使用keytool生成密钥对 以下命令在dos命令行执行,注意当前执行目录,最后生成的密钥对即在该目录下: 1、首先要用KeyTool工具来生成私匙库:(-alias别名 –validity 3650表示10年有效) keytool -genkey -alias privatekey -keystoreprivateKeys.store -validity 3650 2

基于TrueLicense实现产品License验证功能

情到浓时终转凉″ 提交于 2020-01-19 04:25:29
受朋友所托,需要给产品加上License验证功能,进行试用期授权,在试用期过后,产品不再可用。 通过研究调查,可以利用Truelicense开源框架实现,下面分享一下如何利用Truelicense实现授权验证功能。 在此之前先介绍一下License授权和验证的原理: 1、 首先需要生成密钥对,方法有很多,JDK中提供的KeyTool即可生成。 2、 授权者保留私钥,使用私钥对包含授权信息(如截止日期,MAC地址等)的license进行数字签名。 3、 公钥交给使用者(放在验证的代码中使用),用于验证license是否符合使用条件。 实现步骤(代码参考前贤网上案例实现,不再赘写): 一、使用KeyTool生成密钥对 转到CMD命令行,切换到%JAVA_HOME%\jre\bin\security\ 目录(KeyTool工具一般在此目录),执行命令生成的密钥对: 1、首先利用KeyTool工具来生成私匙库:(-alias别名 –validity 3650表示10年有效) keytool -genkey -alias privatekey -keystoreprivateKeys.store -validity 3650 2、然后把私匙库内的公匙导出到一个文件当中: keytool -export -alias privatekey -file certfile.cer

SSL/TLS握手过程

雨燕双飞 提交于 2020-01-19 01:50:08
1、握手与密钥协商过程 基于RSA握手和密钥交换的客户端验证服务器为示例详解TLS/SSL握手过程 再看一张手绘时序图 (1).client_hello 客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息,相关信息如下: • 支持的最高TSL协议版本version,从低到高依次 SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2,当前基本不再使用低于 TLSv1 的版本; • 客户端支持的加密套件 cipher suites 列表, 每个加密套件对应前面 TLS 原理中的四个功能的组合:认证算法 Au (身份验证)、密钥交换算法 KeyExchange(密钥协商)、对称加密算法 Enc (信息加密)和信息摘要 Mac(完整性校验); • 支持的压缩算法 compression methods 列表,用于后续的信息压缩传输; • 随机数 random_C,用于后续的密钥的生成; • 扩展字段 extensions,支持协议与算法的相关参数以及其它辅助信息等,常见的 SNI 就属于扩展字段,后续单独讨论该字段作用。 (2).server_hello+server_certificate+sever_hello_done • server_hello, 服务端返回协商的信息结果,包括选择使用的协议版本