公钥算法

公钥可搜索加密及其python实现

孤街浪徒 提交于 2020-01-11 08:03:21
目录 公钥可搜索加密 密码工具库 PEKSBoneh2004方案代码实现 Reference 公钥可搜索加密 公钥可搜索加密(Public-Key Encryption with Keyword Search,简称PEKS)定义如下: S e t u p ( 1 λ ) → ( s k , p k ) \mathsf{Setup}(1^\lambda) \to (\it{sk}, \it{pk}) S e t u p ( 1 λ ) → ( s k , p k ) :初始化算法,输入安全参数 1 λ 1^\lambda 1 λ ,获取私钥 s k \it{sk} s k 和公钥 p k \it{pk} p k 。 E n c ( p k , w ) → c \mathsf{Enc}(\it{pk}, w) \to c E n c ( p k , w ) → c :关键词加密算法,输入公钥和文档关键词 w w w ,输出文档关键词对应的密文 c c c 。 T d G e n ( s k , w ) → t d \mathsf{TdGen}(\it{sk}, w) \to \it{td} T d G e n ( s k , w ) → t d :陷门生成算法,输入私钥和搜索关键词 w w w ,输出搜索关键词对应的陷门 t d \it{td} t d 。 T e s t ( t d

iOS RSA公钥加密数据 服务端接受PHP私钥解密 反过服务端公钥加密数据 iOS端私钥解密数据

扶醉桌前 提交于 2020-01-10 01:56:36
*/ /*--> */ */ /*--> */ 加密传输的数据,采用 RSA算法,RSA是一种非对称算法,算法需要一对密钥,使用其中一个加密,需要使用另外一个才能解密。有可私钥可以直接生产公钥。 iOS SDK并不支持私钥加密,公钥解密。可以通过OPENSSL第三方库解决。 使用openssl命令行生成密钥对 openssl req -x509 - out public_key.der -outform der - new -newkey rsa: 1024 -keyout private_key.pem 根据提示,填入私钥的密码(代码中需要用到),签名证书的组织名、邮件等信息之后,就会生成包含有公钥的证书文件public_key.der合私钥文件private_key.pem。 public_key.der文件用于分发到iOS客户端进行公钥加解密,而private_key.pem文件留在服务器端供php使用。当然,为了在服务器端进行加解密测试,那么我们还可以生成一个服务器端PHP使用的pem公钥文件: openssl rsa - in private_key.pem -pubout - out public_key.pem 上面这个命令就会根据输入的私钥文件生成pem格式的公钥文件了。从这里也可以看到,根据私钥,我们是可以生成相对应的公钥的,这也就是为什么我们要把公钥放在客户端

网络安全RSA加密

折月煮酒 提交于 2020-01-08 01:44:54
网络安全课相关知识: RSA 预备知识 1.1 快速幂算法 顾名思义,快速幂就是快速算底数的$n$次幂。其时间复杂度为${\rm{O(log n)}}$,与朴素的$O\left( n \right)$相比,效率有了极大的提高。具体可以参考百度百科:快速幂。 1.2 扩展欧几里得算法 扩展欧几里得算法(英语:Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)的扩展。已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个很可能是负数),使它们满足贝祖等式 ax+by=gcd(a,b). ax+by=gcd(a,b). 如果$a$是负数,可以把问题转化成 $\left| a \right|\left( { - x} \right){\rm{ }} + {\rm{ }}by{\rm{ }} = {\rm{ }}gcd\left( {\left| a \right|,b} \right)$($\left| a \right|$为a的绝对值),然后令$x\prime {\rm{ }} = {\rm{ }}\left( { - x} \right)$。具体可以参考维基百科:扩展欧几里得。 1.3 米勒-拉宾素性检验算法 要测试${\rm{N}}$是否为素数,首先将${\rm{N - 1}}$分解为${2^s}d$

macos修改vmware Fusion的NAT网络

痞子三分冷 提交于 2020-01-07 03:44:20
远程连接Linux 为什么要远程连接Linux 在实际的工作场景中,虚拟机界面或者物理服务器本地的终端都是很少接触的,因为服务器装完系统之后,都要拉倒IDC机房托管,如果是购买的云主机,那更碰不到服务器本体了,只能通过 远程连接 的方式管理自己的Linux系统。 因此在装好Linux系统之后,使用的第一步应该是配置好 客户端软件(ssh软件进行连接)连接Linux系统 。 通过什么软件呢? Xshell SecureCRT 远程连接必备的知识 ip地址 > 服务器的位置 互联网上的计算机都会有一个唯一的32位的ip地址,如同家里的门牌号,对应到服务器的位置。 我们找人,可以通过身份证号码对应某个人 那我们找到某台服务器,也必须是通过IP地址 局域网 (针对自己班级/家庭所在环境)里也有预留的ip地址,一般是192/10/172开头,局域网的IP地址也是唯一的。 windows查看ip通过命令: 在cmd终端敲下:ipconfig查看“以太网适配器 本地连接 IPv4”的Ip地址就是自身网线的ip地址了 Linux查看ip方式: 方式1:ip addr 方式2: ifconfig 外网Ip 全世界哪里都可以访问, 虚拟机网络配置 host only 仅主机 单机模式,了解即可 电脑pc > 皇帝 虚拟机 > 老百姓 老百姓被皇帝控制,无法与外届通信 nat模式(网络地址转换)

区块链的技术核心是什么?

▼魔方 西西 提交于 2020-01-06 21:01:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 区块链技术核心 简单来说,区块链是一个提供了拜占庭容错、并保证了最终一致性的分布式数据库;从数据结构上看,它是基于时间序列的链式数据块结构;从节点拓扑上看,它所有的节点互为冗余备份;从操作上看,它提供了基于密码学的公私钥管理体系来管理账户。 或许以上概念过于抽象,我来举个例子,你就好理解了。 你可以想象有100台机器之间的网络是广域网,并且,这100台机器的拥有者互相不信任。那么,我们采用什么样的算法(共识机制)才能够为它提供一个可信任的环境,并且使得:节点之间的数据交换过程不可篡改,并且已生成的历史记录不可被篡改;节点之间的数据交换过程不可篡改,并且已生成的历史记录不可被篡改;节点之间的数据交换过程不可篡改,并且已生成的历史记录不可被篡改;基于少数服从多数的原则,整体节点维护的数据可以客观反映交换历史。区块链就是为了解决上述问题而产生的技术方案。 散列函数 区块链技术的一个重要组件是将哈希函数用于许多操作。哈希是一种将哈希函数应用于数据的方法,其为几乎任何大小的输入(例如,文件,文本或图像)计算相对独特的输出(称为消息digest,或仅仅是digest)。它允许个人独立地获取输入数据、散列数据并得出相同的结果 - 证明数据没有变化。即使对输入的最小改变(例如,改变单个位)也将导致完全不同的输出

看完这篇文章,我奶奶都懂了https的原理

百般思念 提交于 2020-01-04 03:34:43
  前言   前段时间看到一篇文章讲如何保证API调用时数据的安全性(传送门: https://blog.csdn.net/ityouknow/article/details/80603617 ),文中讲到利用RSA来加密传输AES的秘钥,用AES来加密数据,并提供如下思路:   说人话就是前、后端各自生成自己的RSA秘钥对(公钥、私钥),然后交换公钥(后端给前端的是正常的明文公钥,前端给后端的是用后端公钥加密后的密文公钥;PS:其实我觉得直接交换两个明文公钥就行了),后端生成AES的 明文key ,用明文key进行AES加密得到 密文数据 ,用前端的公钥进行RSA加密得到 密文key ,API交互时 并将密文数据与密文key进行传输,前端用自己的私钥进行RAS解密的到明文key,用明文key进行AES解密得到明文数据;前端给后端发送数据时同理,这样一来,传输的数据都是密文,且只有秘钥才能解密   可惜这篇博客只提供了思路,但并没有具体的代码,我们在网上查找一下资料,开始生撸代码,实现一个前后端API交互数据加密——AES与RSA混合加密,并应用到项目中   后端加、解密   从网上查找工具类,再进行改造   先引入Base64工具类 <!-- Base64编码需要 --> <dependency> <groupId>org.apache.directory.studio<

网络安全RSA加密

心不动则不痛 提交于 2020-01-04 03:26:07
网络安全课相关知识: RSA 预备知识 1.1 快速幂算法 顾名思义,快速幂就是快速算底数的$n$次幂。其时间复杂度为${\rm{O(log n)}}$,与朴素的$O\left( n \right)$相比,效率有了极大的提高。具体可以参考百度百科:快速幂。 1.2 扩展欧几里得算法 扩展欧几里得算法(英语:Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)的扩展。已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个很可能是负数),使它们满足贝祖等式 ax+by=gcd(a,b). ax+by=gcd(a,b). 如果$a$是负数,可以把问题转化成 $\left| a \right|\left( { - x} \right){\rm{ }} + {\rm{ }}by{\rm{ }} = {\rm{ }}gcd\left( {\left| a \right|,b} \right)$($\left| a \right|$为a的绝对值),然后令$x\prime {\rm{ }} = {\rm{ }}\left( { - x} \right)$。具体可以参考维基百科:扩展欧几里得。 1.3 米勒-拉宾素性检验算法 要测试${\rm{N}}$是否为素数,首先将${\rm{N - 1}}$分解为${2^s}d$

面试-HTTPS-身份认证

空扰寡人 提交于 2020-01-02 03:15:28
作者:浩哥的日常 链接:https://zhuanlan.zhihu.com/p/89905893 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 TLS 传输层安全性协定 TLS(Transport Layer Security),及其前身安全套接层 SSL(Secure Sockets Layer)是一种安全协议,目的是为网际网路通信,提供安全及数据完整性保障。 如图, TLS 在建立连接时是需要 客户端发送 ClientHello(包含支持的协议版本、加密算法和 随机数A (Client random) )到服务端 服务端返回 ServerHello、公钥、证书、 随机数B (Server random) 到客户端 客户端使用CA证书验证返回证书无误后。生成 随机数C (Premaster secret) ,用公钥对其加密,发送到服务端 服务端用 私钥 解密得到 随机数C (Premaster secret) ,随后根据已经得到的 随机数ABC生成对称密钥(hello的时候确定的加密算法) ,并对需要发送的数据进行对称加密发送 客户端使用对称密钥(客户端也用随机数ABC生成对称密钥)对数据进行解密。 双方手持对称密钥 使用对称加密算法通讯 而这一流程 服务端的证书 是至关重要的。 证书 证书用来证明公钥拥有者身份的凭证 首先我们需要知道

HTTPS原理简述

孤人 提交于 2020-01-01 19:40:25
角色: A,B,Server,Client,中间窃听者,数字证书签发机构(CA) 工具:对称加密算法,非对称加密算法,数字签名,数字证书 第一步,爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。 第二步,鲍勃确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。 第三步,爱丽丝确认数字证书(对证书信息进行md5或者hash后的编号==用证书机构的公钥对加密的证书编号解密后的证书编号)有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥(鲍勃的公钥),加密这个随机数,发给鲍勃。 第四步,鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)。 第五步,爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。 https要使客户端与服务器端的通信过程得到安全保证,必须 使用对称加密算法 并且 每个客户端的算法都不一样 ,需要一个协商过程,但是 协商对称加密算法的过程,需要使用非对称加密算法来保证安全 ,直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用

Coursera: Internet History, Technology, and Security

北城余情 提交于 2020-01-01 14:31:51
课程网址:https://www.coursera.org/learn/internet-history 学习笔记: Week 1: History - Dawn of Early Computing (1940 - 1960) War Time Computing and Conmmunication — High Stakes Research in Computing, and Communication 二战刺激了政府对各种科技的研究投入,由此促进了计算机技术的发展,其中就包括电子计算机的诞生。 为了解密德国的无线电情报,英国布莱切利园( Bletchley Park )内以艾伦·图灵( Alan Turing )为代表的跨学科( cross-disciplinary )团队为电子通信和计算( electronic communication and computation )技术打下了基础。 — Alan Turing and Bletchley Park 在二战期间,布莱切利园是英国政府进行密码解读的主要场所,各行各业的上万名人员在此处工作,轴心国的密码与密码文件,都会送到那里进行解码。布莱切利园是最早的跨学科合作部门。 Bombe 是一台英国机械计算机,致敬波兰密码破译机 Bomba ,对破译德国 Enigma 密码机起到了重要作用,一个 Bombe 可以模拟36个