OpenSSL

字符串比较,居然暗藏玄机(没收获你锤我)

為{幸葍}努か 提交于 2021-01-14 17:14:53
面试编程基本功的时候,很常见的一个题目是: 判断两个字符串是否完全相同? 画外音:先别急着退,没收获你锤我。 很多同学能够很快的写出对应的代码: public static boolean isEqual(byte[] a, byte[] b) { // 先判断长度是否相同 if (a.length != b.length) { // 长度不同,返回false return false; } // 一个一个字符,循环遍历判断 for (int i = 0; i < a.length; i++) { if (a[i] != b[i]) { // 只要一个字符不同,返回false return false; } } // 全部字符相同,返回true return true; } 代码没有问题,甚至JDK底层,也是这么实现的。 然而,MessageDigest.isEqual却被报了bug,并在JDK 1.6.0_17中被fix成了以下的版本: public static boolean isEqual(byte[] a, byte[] b) { // 先判断长度是否相同 if (a.length != b.length) { // 长度不同,返回false return false; } // 返回结果初始化 int result = 0; // 一个一个字符,循环遍历判断 for

简单的路径规划案例分享

家住魔仙堡 提交于 2021-01-14 16:54:54
本文大纲 项目背景 集成准备 主要代码 成果展示 一、本项目用到的功能点: 地图服务(Map Kit)给您提供一套地图开发调用的SDK,地图数据覆盖超过200个国家和地区,支持数百种语言,方便您轻松地在应用中集成地图相关的功能,全方位提升用户体验。 关键字搜索:通过指定的关键字和可选的地理范围,查询诸如旅游景点、企业和学校之类的地点。 路径规划: 是一套以HTTPS形式提供的步行、骑行、驾车路径规划以及行驶距离计算接口,通过JSON格式返回路径查询数据,提供路径规划能力。 二、集成准备 1. AGC账号注册,项目创建 注册成为开发者 注册地址: https://developer.huawei.com/consumer/cn/service/josp/agc/index.html?ha_source=hms1 创建应用,添加sha256,开启map/site开关,下载json文件 2. 集成Map + Site SDK 将“agconnect-services.json”文件拷贝到应用级根目录下 在“allprojects > repositories”中配置HMS Core SDK的Maven仓地址。 在“buildscript > repositories”中配置HMS Core SDK的Maven仓地址。 如果App中添加了“agconnect-services.json

区块链原理通俗说明

こ雲淡風輕ζ 提交于 2021-01-14 11:59:49
通俗讲解区块链 区块链是一个记录数据的一个共享数据库,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征,根据其具体实现的差异可以实现不同的功能,例如数字货币(Bitcoin),智能合约等。 例子(转载《白话区块链》): 早些时候,农村一般都会有个账房先生,村里人出个工或者买卖些种子肥料等,都会 依靠这个账房先生来记账,大部分情况下其他人也没有查账的习惯,那个账本基本就是这 个账房先生保管着,到了年底,村长会根据账本余额购置些琐碎物件给村里人发发, 以来也都是相安无事,谁也没有怀疑账本会有什么问题 账房先生因为承担着替大家记账 的任务,因此不用出去干活出工,额外会有些补贴,仅此一点,倒也是让一些人羡慕不已 下图便是当时账本的记账权图示: 终于有一天,有个人无意中发现了账房先生的那本账 看了下账面,发现数字不对, 最关键的是支出、收入、余额居然不能平衡 对不上,这可不行,立即报告给其他人,结 果大家都不干了,这还得了 经过一番讨论,大家决定, 轮流来记账,这个月张 ,下个 月李四,大家轮着来,防止账本被一个人拿在手里 于是,账本的记账权发生了如下图所示的变化: 通过上图我们可以看到,村里的账本由大家轮流来保管记账了,一切又相安无事了, 直到某一天,李四想要挪用村里的公款,可是他又怕这个事情被后来记账的人发现,怎么办呢?李四决定烧掉账本的一部分内容

为什么苹果允许用户安装未受信任的企业级开发者所开发的软件?

我是研究僧i 提交于 2021-01-14 08:27:30
App 上架 AppStore 需要经过苹果的审核,违规 App 不能上架。苹果 iOS 系统有一套完善的加密方案,在不越狱破解的情况下,非 AppStore 下载的 App 需要证书签名,才能在 iOS 上运行。 证书需要向苹果申请,有几类证书。 免费证书。用于入门级开发者,可以用 Xcode 真机调试,不能上架 AppStore。 个人开发者证书。需要收费,支持个人真机调试,可以将上架 AppStore。 公司证书。需要收费,支持多人协作开发,可以将上架 AppStore。 企业证书。需要收费,支持企业自己发布 App, 不可以上架到 AppStore。 某些 App 可以通过 Safari 下载,信任证书后正常使用。这种 App 就是用了企业证书。 为什么苹果公司允许企业证书呢?顾名思义,企业证书是在企业内部使用的。正常情况下,企业证书有如下用途。 某些 App 只是企业内部使用,不方便上架 AppStore。比如企业内部有个 OA 系统,用于员工打卡、请假、收发邮件。企业为 OA 系统开发了 iOS 的 App。这个 App 对企业内部员工很有用,企业外用户完全无用。因此这个 OA 系统 App 不方便上架 AppStore,就算想上架,也不能审核通过。 某些 App 虽然可上架 AppStore 外发,但新版本还在开发测试过程中。使用企业证书签名 App,放到网上

使用Let's Encrypt搭建永久免费的HTTPS服务

强颜欢笑 提交于 2021-01-14 08:26:42
1.概述 1.1 HTTPS概述 HTTPS即HTTP + TLS,TLS 是传输层加密协议,它的前身是 SSL 协议。我们知道HTTP协议是基于TCP的。简而言之HTTPS就是在TCP的基础上套一层TLS协议,对HTTP原来在TCP明文传输的内容进行加密,达到安全的目的。 HTTP 和 TLS 在协议层的位置以及 TLS 协议的组成如下图: 目前很多网站都启用了HTTPS,这肯定是未来的趋势。而且一些场景必须使用HTTPS协议的,比如微信公众号的某些功能、小程序接入H5等等。 详情参考:https://developer.baidu.com/resources/online/doc/security/https-pratice-1.html 1.2 Let’s Encripty介绍 Let’s Encrypt是一个非盈利的,免费的CA,可以提供免费HTTPS认证服务。 提供了一套完整的工具,基于这套工具,我们可以免费来搭建HTTPS 网站。 详情参考:https://letsencrypt.org/ 1.3 ssllabs介绍 ssllabs可以提供对https部署进行安全监测,评价的服务。 详情参考:https://www.ssllabs.com/ssltest/analyze.html 2.Let’s Encrypt部署HTTPS服务 2.1 为什么使用Let’s

SSL / TLS 协议运行机制详解

▼魔方 西西 提交于 2021-01-14 05:54:17
链接:www.ruanyifeng.com/blog/2014/02/ssl_tls.html 互联网的通信安全,建立在SSL/TLS协议之上。 本文简要介绍SSL/TLS协议的运行机制。文章的重点是设计思想和运行过程,不涉及具体的实现细节。如果想了解这方面的内容,请参阅RFC文档。 一、作用 不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。 (1) 窃听风险(eavesdropping):第三方可以获知通信内容。 (2) 篡改风险(tampering):第三方可以修改通信内容。 (3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。 SSL/TLS协议是为了解决这三大风险而设计的,希望达到: (1) 所有信息都是加密传播,第三方无法窃听。 (2) 具有校验机制,一旦被篡改,通信双方会立刻发现。 (3) 配备身份证书,防止身份被冒充。 互联网是开放环境,通信双方都是未知身份,这为协议的设计带来了很大的难度。而且,协议还必须能够经受所有匪夷所思的攻击,这使得SSL/TLS协议变得异常复杂。 二、历史 互联网加密通信协议的历史,几乎与互联网一样长。 1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。 1995年,NetScape公司发布SSL 2.0版

MQTT的学习之Mosquitto安装和使用

梦想与她 提交于 2021-01-13 23:02:46
Mosquitto是一个实现了MQTT3.1协议的代理服务器,由MQTT协议创始人之一的Andy Stanford-Clark开发,它为我们提供了非常棒的轻量级数据交换的解决方案。本文的主旨在于记录Mosquitto服务的安装和使用,以备日后查阅。 获取&安装 在Linux系统上安装Mosquitto,本人建议大家使用源码安装模式,最新的源码可从 http://mosquitto.org/files/source/ 地址中获取。解压之后,我们可以在源码目录里面找到主要的配置文件config.mk,其中包含了所有Mosquitto的安装选项,详细的参数说明如下: # 是否支持tcpd/libwrap功能. # WITH_WRAP:=yes # 是否开启SSL/TLS支持 # WITH_TLS:=yes # 是否开启TLS/PSK支持 # WITH_TLS_PSK:=yes # Comment out to disable client client threading support. # WITH_THREADING:=yes # 是否使用严格的协议版本(老版本兼容会有点问题) # WITH_STRICT_PROTOCOL:=yes # 是否开启桥接模式 # WITH_BRIDGE:=yes # 是否开启持久化功能 # WITH_PERSISTENCE:=yes #

BeyondCompare3 提示许可证密钥已被撤销解决方法

北慕城南 提交于 2021-01-13 22:13:50
今天对比文件提示 许可证密钥已被撤销:3281-0350! 找过了几个注册码还是不行。 正确简单的解决方法: 1、找到 BCState.xml 文件 ​ 2、编辑器打开,删除<TCheckForUpdatesState>节点, 即 <TCheckForUpdatesState> ************************** </TCheckForUpdatesState> 之间的部分 3、保存退出 4、重新打开BeyondCompare3,可以了! 来源: oschina 链接: https://my.oschina.net/u/4382591/blog/3560486

【揭秘】什么是不对称秘钥和CA证书

早过忘川 提交于 2021-01-13 19:08:01
密钥交换简单的说就是利用非对称加密算法来加密对称密钥保证传输的安全性,之后用对称密钥来加密数据。 ★方案1——单纯用“对称加密算法”的可行性 首先简单阐述一下,“单纯用对称加密”为啥是【不可行】滴。 如果“单纯用对称加密”,浏览器和网站之间势必先要交换“对称加密的密钥”。 如果这个密钥直接用【明文】传输,很容易就会被第三方(有可能是“攻击者”)偷窥到;如果这个密钥用密文传输,那就再次引入了“如何交换加密密钥”的问题——这就变成“先有鸡还是先有蛋”的循环逻辑了。 所以,【单纯用】对称加密,是没戏滴。 ★方案2——单纯用“非对称加密算法”的风险 说完“对称加密”,再来说说“非对称加密”。 在前面的“背景知识”中,已经大致介绍过“非对称加密”的特点——“加密和解密采用不同的密钥”。基于这个特点,可以避开前面提到的“循环逻辑”的困境。大致的步骤如下: 第1步 网站服务器先基于“非对称加密算法”,随机生成一个“密钥对”(为叙述方便,称之为“k1 和 k2”)。因为是随机生成的,目前为止,只有网站服务器才知道 k1 和 k2。 第2步 网站把 k1 【私钥】保留在自己手中,把 k2【公钥】 用【明文】的方式发送给访问者的浏览器。 因为 k2 是明文发送的,自然有可能被偷窥。不过不要紧。即使偷窥者拿到 k2,也【很难】根据 k2 推算出 k1 (这一点是由“非对称加密算法”从数学上保证的)。

如何修改 CentOS 6.x 上默认Python

前提是你 提交于 2021-01-13 15:26:19
最近在工作中遇到一个问题,就是有一个功能希望在各种服务器上实现,而服务器上的系统版本可能都不一样,有的是 CentOS 6.x,有的是 CentOS 7.x 。 需要说明的一点是,CentOS 6.x 上的 Python 版本是 2.6.x 的,而 CentOS 7.x 上的 Python 版本是 2.7.x 的,这意味着我要实现的功能要适配这两种版本的系统。 你可能会说,这有什么的,自己写的时候,注意一下就好了。 事情其实没有那么容易,我要实现的功能是基于一个框架进行定制,需要修改不少的框架代码。这个框架在不同的 Linux 版本上,是有不同的版本的,而且差异巨大,曾经想过在 CentOS 6.x 和 CentOS 7.x 将这个框架安装成同一个版本,最后还是失败了,无法安装,原因就是高版本需要 Python2.7,而 CentOS 6.x 上只有 Python2.6。 这个历史问题一直遗留到现在,由于这次的功能影响到的代码较多,如果要对两个版本的框架分别进行定制的话,需要花不少的时间,为了不维护两套版本,避免浪费多余的精力去做适配,我决定将 CentOS 6.x 上默认的 Python2.6 升级成 Python2.7。 下面是整个升级过程,别看步骤简单,这些精简步骤的背后可是有不少的坑,被我踩过后,你可以直接使用了。 首先确认下你机器上的默认的 Python 版本 $