自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (3)
  • 收藏
  • 关注

原创 Android NDK开发,跨平台构建crypto++动态链接库并部署到Android Stdio中

Android NDK开发,跨平台构建crypto++动态链接库并部署到Android Stdio中一、基础需要在AS中安装NDK、CMake,DDLB一般默认与AS一起安装。CMake与ndk-build不能同时使用(本文使用的是CMake)。CMake入门可以看这个:CMake 入门实战 | HaHack安卓官网的部分资料: CMake | Android NDK | Android Developers (google.cn) 配置 CMake | Android 开发者 | A

2021-09-16 19:29:44 1484 1

原创 关于NP与co-NP、RP与coRP的理解

关于NP与co-NP、RP与coRP的理解在相信大多数人在接触计算复杂性领域时,都会被P、NP、NPC、NP-Hard、co-NP、RP……的等一系列困难问题的各种分类搞蒙。关于基本的定义,例如什么是P类问题什么是NP类或者NPC类问题,网上有很多很好的回答,我就不介绍了。这篇主要讲什么是co-NP以及如何理解它。定义语言LLL属于coNPcoNPcoNP当且仅当LLL的补集L‾∈NP\overline{L}\in NPL∈NP。这么简短的一句话该如何理解?若要证明一个问题属于coNPcoNPcoN

2021-08-14 16:32:43 4559

原创 Android开发RecyclerView中Holder.absoluteAdapterPosition返回-1的解决办法

Android开发RecyclerView中Holder.absoluteAdapterPosition返回-1的解决办法背景最近在学习安卓开发,参考书是《第一行代码——Android(第三版)》,第四章UI开发时碰到了如下问题。问题描述在RecyclerView中,为了响应点击事件,我们通常在Adapter适配器中重写onCreateViewHolder()等函数,并为每个控件写一个setOnClickListener,但是我在onCreateViewHolder()中加监听器时,要获取的posi

2021-08-12 19:19:25 1566 3

原创 Python中两种简单创建全零列表(数组)的方式(不需numpy)

Python中两种简单创建全零列表(数组)的方式(不需numpy)暴力重复print([0]*8)列表推导式 print([0 for i in range(10)])结果:[0, 0, 0, 0, 0, 0, 0, 0][0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

2021-07-23 09:14:18 3854

原创 分解因子算法——Pollard rho算法

分解因子算法——Pollard ρ\rhoρ 算法攻击RSA密码体制最明显的方法就是分解大整数。关于大整数分解的算法有许多,常见的有试除法、p±1p\pm1p±1算法、Pollard ρ\rhoρ算法、数域筛法、二次筛法等等。这篇分享的就是其中之一的Pollard ρ\rhoρ算法。我们说因子分解,很多时候并不一定要把大整数nnn彻底分解成素数乘积,而是求出nnn的某个非平凡因子即可。求大整数的一个因子固然困难,但是Euclidean算法告诉我们求两个数的最大公因子是可以在O(log⁡n)O(\log

2021-03-22 12:45:47 2809 2

原创 求离散对数问题——指数演算法

求离散对数问题——指数演算法离散对数(DLP)问题:设有群(G,⋅)(G,\cdot)(G,⋅),α∈G\alpha \in Gα∈G是一个nnn阶元素。给定β∈<α>\beta \in \left< \alpha \right>β∈⟨α⟩,找到指数a,0≤a≤n−1a,0\le a\le n-1a,0≤a≤n−1,满足αa=β\alpha ^{a} =\betaαa=β这时aaa也表达成:a=log⁡αβa=\log_{\alpha}\betaa=logα​β.前面介绍

2021-03-14 20:42:51 1570

原创 RSA密码——Wiener的低解密指数攻击(利用连分数理论)

RSA密码——Wiener的低解密指数攻击依旧考虑RSA密码体制:n=pqn=pqn=pq,其中ppp和qqq是素数。ϕ(n)=(p−1)(q−1)\phi(n)=(p-1)(q-1)ϕ(n)=(p−1)(q−1)。我们知道RSA的加解密主要进行模幂运算,如果利用快速平方乘方法的话,选择一个较小的解密指数会大幅度降低计算时间,提高效率。但是这里指出:应该避免解密指数过小。这里介绍由M.Wiener提出的一种攻击,可以计算出解密指数aaa。前提条件是:3a<n14且p<q<2q3a&

2021-03-13 18:59:09 4496 8

原创 RSA解密正确性证明

RSA解密正确性证明先描述一下RSA密码体制:RSA密码体制:大素数p,qp,qp,q,模数n=pqn=pqn=pq,加密指数bbb,解密指数aaa,满足ab≡1(modϕ(n))ab\equiv1 \pmod{\phi(n)}ab≡1(modϕ(n))。加密:c=mb mod nc=m^{b}\bmod{n}c=mbmodn;解密:m=ca mod nm=c^{a}\bmod{n}m=camodn。本篇是证明RSA解密确实能够得到明文mmm。当m∈Zn∗m\in \mathbb{Z}_{

2021-03-12 16:41:18 1566

原创 利用解密指数来攻击RSA密码体制

利用解密指数来攻击RSA密码体制先描述一下RSA密码体制:RSA密码体制:大素数p,qp,qp,q,模数n=pqn=pqn=pq,加密指数bbb,解密指数aaa,满足ab≡1(modϕ(n))ab\equiv1 \pmod{\phi(n)}ab≡1(modϕ(n))。加密:c=mb mod nc=m^{b}\bmod{n}c=mbmodn;解密:m=ca mod nm=c^{a}\bmod{n}m=camodn。这篇文章要讲的是这样一个结论:如果解密指数aaa已知,那大整数nnn可以在多项式

2021-03-12 16:09:45 555 1

原创 IDEA加密算法的C++实现

IDEA加密算法的C++实现国际数据加密标准(International Data Encryption Algorithm,IDEA)是由瑞士联邦学院的Xuejia Lai(来学嘉)和James Massey提出的分组密码。目前许多开源组织都使用IDEA作为加密算法,例如PGP。关于IDEA算法的原理讲解可以参考IDEA数据加密算法。这里给出IDEA的C++实现代码(参考书籍:王静文, 吴晓艺. 密码编码与信息安全:C++实践[M]. 清华大学出版社, 2015.)头文件IDEA.h//type

2021-03-09 17:28:39 2202

原创 关于欧几里得算法(Euclidean Algorithm)的迭代次数的证明

关于欧几里得算法(Euclidean Algorithm)的迭代次数的证明我们直到欧几里得算法是计算两个数的最大公因数(或者两个多项式的最大公因式),并且在其他算法中(例如因子分解算法)经常会用到欧几里得算法。本篇专门证明欧几里得算法的迭代次数和计算复杂度。欧几里得算法描述设我们研究的问题是利用欧几里得算法求gcd(a,b)gcd(a,b)gcd(a,b),求解算法流程如下:Euclidean Algorithm(a,b)r0=a,r1=b,m=1r_{0}=a,r_{1}=b,m=1r0​=a

2021-03-06 12:06:41 1343 1

原创 因子分解算法——Pollard 的p-1方法

因子分解算法——Pollard 的p−1p-1p−1方法1 算法核心为了分解合数nnn。设数nnn的一个因子是ppp,那么并且p−1p-1p−1的每个因子qqq满足q≤Bq\le Bq≤B(B是自己选的一个数,称为界),此时必有(p−1)∣B!(p-1)|B!(p−1)∣B!证:设p−1=q1q2⋯qmp-1=q_{1}q_{2}\cdots q_{m}p−1=q1​q2​⋯qm​,并且q1、q2、⋯、qm≤Bq_{1}、q_{2}、\cdots、q_{m}\le Bq1​、q2​、⋯、qm​

2021-03-06 10:22:13 5016 5

原创 大整数分解因子算法——Dixon的随机平方算法

大整数分解因子算法——Dixon的随机平方算法许多分解因子算法的理论依据是这样的事实:假设我们可以找到x≢±y(modn)x\not\equiv \pm y\pmod{n}x​≡±y(modn),但是有x2≡y2(modn)x^{2}\equiv y^{2}\pmod{n}x2≡y2(modn)。那么有n∣(x−y)(x+y)n|(x-y)(x+y)n∣(x−y)(x+y)但是n∤(x+y)n\nmid (x+y)n∤(x+y)且n∤(x−y)n\nmid (x-y)n∤(x−y),所以gc

2021-03-05 21:36:12 2332 1

原创 Pollard rho 算法求解离散对数问题

Pollard ρ\rhoρ 算法求解离散对数问题离散对数(DLP)问题:设有群(G,⋅)(G,\cdot)(G,⋅),α∈G\alpha \in Gα∈G是一个nnn阶元素。给定β∈<α>\beta \in \left< \alpha \right>β∈⟨α⟩,找到指数c,0≤c≤n−1c,0\le c\le n-1c,0≤c≤n−1,满足αc=β\alpha ^{c} =\betaαc=β前面分享过因子分解的Pollard ρ\rhoρ 算法(为了更好地理解Pollar

2021-02-28 20:40:52 3681 9

原创 流密码之m序列中的线性无关组

m序列中的线性无关组1、简介在流密码的基础学习中,最重要的是理解线性反馈移位寄存器和二元序列的相关性质。这类知识与代数基础联系紧密,通常需要花大的精力认真理解线性序列的各种定理推论。这里讨论m序列的一个问题:设a1,a2,⋯ ,ana_{1},a_{2},\cdots,a_{n}a1​,a2​,⋯,an​是NNN级mmm序列的一个连续子列,则矩阵A=[a1a2⋯ana2a3⋯an+1⋮⋮⋮⋮anan+1⋯a2n−1]A=\begin{bmatrix}a_{1} & a_{2} &amp

2021-02-21 16:17:43 265

原创 Pohlig-Hellman算法求解离散对数问题

Pohig-Hellman算法求解离散对数问题离散对数(DLP)问题:ax≡b(modp)a^{x} \equiv b \pmod{p}ax≡b(modp)ppp是大素数。前面已经介绍了求解离散对数问题的小步大步算法(BSGS)(时间复杂度是O(p)O(\sqrt{p})O(p​)),这里介绍另外一种求解光滑阶循环群上的离散对数的方法——Pohig-Hellman方法。事实上,Pohlig-Hellman算法的复杂度在一般情况下比BSGS算法高!但是在特殊情况下(循环群的阶是光滑数,即可以因子分

2021-02-12 10:14:06 5555 5

原创 线性密码分析(简单笔记)

线性密码分析(简单笔记)关于差分密码分析的可以看差分密码分析读书报告。欢迎大家讨论留言。1、发现在1993年的欧洲密码年会上,日本学者Matsui提出了对DES算法的一种新的攻击方法,即线性密码分析.同年的国际密码年会上,Matsui发现了DES算法中2条新的线性逼近关系,他利用这两条新的逼近关系对DES算法进行攻击,并引入了纠错码中的阵列译码思想来优化攻击过程.在动用12台工作站,花费50天左右的时间后,Matsui成功地破译了DES算法,这是公开文献中第一个对DES算法的实验分析结果。2、简介

2021-02-05 19:33:31 6454 7

原创 小步大步算法(BSGS)求解离散对数问题

小步大步算法(BSGS)求解离散对数问题众所周知,离散对数问题(Discrete Logarithm Problem,DLP)一直被认为是困难问题。离散对数问题可以是基于循环群的,也可以是基于椭圆曲线的,本篇以循环群上的离散对数问题为例。主要描述的是这样一个问题:DLP问题求解同余方程Ax≡B(modP)A^{x}\equiv B \pmod{P}Ax≡B(modP)其中,PPP是大素数。如果是在整数上,求对数就可以解决。但是在循环群上,离散对数求解却是难之又难。问题分析和算法主要思想根

2021-02-05 12:26:06 2985

原创 DES加解密代码实现(C++)

DES加解密代码实现(C++)今天花了时间实现了一遍DES算法的加解密全过程。分享一下欢迎交流。AES的可以参考AES算法代码实现(完整C++源代码)参考书籍是《密码编码与信息安全:C++实践》#include <iostream>#include <string>#include <vector>using std::vector;using namespace std;/* unsigned long long 类型正好是64bit */cla

2021-02-04 21:52:44 1153 4

原创 快速模幂算法—重复平方乘方法(附C++实现)

快速模幂算法—重复平方乘方法(附C++实现)在密码学中,经常碰见大整数的模幂运算,例如RSA的加解密或者Rabin密码的加密等等(Rabin解密需要利用循环群的开方算法)。前面讲过快速模幂的蒙哥马利算法,其实蒙哥马利模幂需要结合重复平方乘方法来计算。总的来说,重复平方乘方法使用更为广泛。1、主要思想考虑计算ab(modn)a^{b}\pmod{n}ab(modn),直接算无疑是复杂的,因为aba^{b}ab这个数太大了,会溢出。常见的乘方法是对指数bbb做因子分解,例如b=b1b2b3⋯b=b_{1

2021-01-25 09:38:09 6678 1

原创 AES算法代码实现(完整C++源代码)

AES加解密算法全过程实现(C++)利用C++编程实现了AES的加解密过程。关于列混合计算不清楚的可以看上一篇博客。主要针对128bit的明文和密钥给出实现,其他情况需要改一下Nk,Nb,Nr的值和某些地方的数组维度。byte GFMultiplyByte(byte L, byte R)这个函数是计算多项式模乘的结果(列混淆中的那一步)。其他想自己动手编编的可以复制一下这里的S盒和逆S盒或者其他常量。参考书籍是《密码编码与信息安全:C++实践》。#include <iostream&gt

2021-01-23 19:31:37 10858 6

原创 蒙哥马利算法(Montgomery Algorithm)|蒙哥马利约简、模乘、模幂

Montgomery Algorithm(蒙哥马利算法)蒙哥马利算法分为3种,蒙哥马利模乘,蒙哥马利约简,蒙哥马利模幂1、从蒙哥马利模乘说起模乘是为了计算ab(modN)ab\pmod{N}ab(modN)。普通算法中,在计算模N时,利用的是带余除法,除法运算需要太多次乘法,计算复杂度较高,蒙哥马利算法的思想就是利用进制表示简化除法运算,转化成位运算。蒙哥马利形式:为了计算ab(modN)ab\pmod{N}ab(modN),找一个RRR,然后使得a′≡aR(modN),b′≡bR(modN)a'

2021-01-22 16:25:42 18731 29

原创 量子计算(一、预备知识)

量子计算(一、预备知识)打算开始分享量子计算方面的知识,这是第一篇。关于具体的量子qubitqubitqubit的定义,左矢、右矢、测量,量子态等最基本的知识就不做介绍了。如果没有任何基础的可以找相关资料看看。接下来几篇可能会和大家分享最基本的量子算法。为了后续讲解方便,这次先把一些结论放上。关于Hadamard矩阵H,有如下结论H=12(111−1)H∣0>=12(∣0>+∣1>)H∣1>=12(∣0>−∣1>)H∣bi>=12(∣0>+(−1)bi∣

2021-01-22 00:11:49 392

原创 爬虫的初步进阶||正则表达式+BeautifulSoup处理特殊标签实现多级网页跳转的信息爬取

爬虫的初步进阶|正则表达式+BeautifulSoup处理特殊标签实现多级网页跳转的信息爬取继续上一篇帖子:一个简单的百度爬虫实例,上篇主要是在百度的青春有你词条界面爬取了选手的信息(包括姓名、个人主页网址,国家地区,星座,花语,经纪公司),并存在本地的json文件中。本次主要工作是从上次爬到的个人主页网址下载选手的照片到本地。主要用到的技术有:利用json.dumps()和json.loads()函数将数据存进json文件并从json文件取出。利用正则表达式结合BeautifulSoup技术分析

2021-01-19 23:02:46 544 6

原创 关于AES的列混合计算和解密流程问题

关于AES的列混合计算和解密流程问题我们知道AES的加解密过程都可以用有限域中的计算表示出来。关于AES的加解密过程,很多教材资料都有详细描述,这里我想强调①关于AES加密过程中的MixColumn阶段是如何计算的;②AES的解密流程问题。AES的列混合计算我们经常会看到参考资料说AES的列混合过程是对状态矩阵的每一列左乘一个确定的矩阵(如下图),一般表示为然后我们乘了之后会发现结果并不对。事实上,这里表示的并不是简单的矩阵乘法,而是GF(28)GF(2^{8})GF(28)上的多项式模乘。从A

2021-01-18 19:45:22 8333 8

原创 求n阶循环群上平方根的方法

求n阶循环群上平方根的方法前面讨论勒让德符号计算问题时,就说明了二次同余式是否有解的问题的重要性。今天来讨论,对于二次同余方程:x2≡a(modp)x^{2} \equiv a\pmod{p}x2≡a(modp)有解,即Legendre符号(ap)=1(\frac{a}{p})=1(pa​)=1,那么如何求xxx的值呢?这就是今天讨论的nnn阶循环群的平方根求法(由于模p的乘法群的阶是p−1p-1p−1,所以这里的nnn就是$p-$1)。其实我本来也觉得这个证明过程和计算过程偏复杂,不想深入理解记住,但

2021-01-18 14:01:03 561

原创 json.loads()加载的结果是字符串str类型

json.loads()加载的结果是字符串str类型今天爬虫时,发现从.json文件中用json.loads(file.read())返回的结果是str类型,并不是dict处理方法:再用一遍json.loads(),json_array = json.loads(json.loads(file.read())),这个结果是dict,可以调用字典的相关方法了。...

2021-01-16 22:49:06 2331

原创 欧几里得算法和扩展的欧几里得算法C++递归实现

欧几里得算法和扩展的欧几里得算法C++递归实现关于欧几里得算法的流程不再赘述,不清楚的可以搜得到。本篇主要通过C++代码利用递归的思想实现,参考书籍是《密码编码与信息安全:C++实践》。1、欧几里得算法实现欧几里得算法比较简单,主要用于求两个数(多项式)的最大公因数(式),直接上代码。#include <iostream>using namespace std;int Euclidean(int a, int b){ if(b==0){ return a; }else{

2021-01-16 09:26:07 1122 2

原创 一个简单的百度爬虫实例

一个简单的百度爬虫实例最近在百度aistdio自学课程,看到一个基础课程的作业是爬取百度上《青春有你》选手信息,索性就跟着爬了一下,复习一下自己去年自学的已经忘得差不多的爬虫。直接上代码,适合刚学习的朋友一起交流,大神请忽略。import requestsfrom bs4 import BeautifulSoupimport jsonimport datetimedef getHTML(url): headers = { 'User-Agent': 'Mozilla/

2021-01-14 16:51:48 10046

原创 一种求周期二元线性序列的极小多项式的方法

一种求线性周期序列的极小多项式和线性复杂度的方法前面说到了BM算法,这里再介绍一个求周期序列的线性复杂度的方法。本方法看起来似乎比Berlekamp-Massey算法(BM算法一般用于求有限长序列的线性复杂度,求周期序列的线性复杂度的话,至少要取2个周期来生成)流程简单,本方法可以推广到有限域FqF_{q}Fq​,但是具体形式需要重新导出。1.原理设已经给定一个周期为lll的线性序列aaa,则序列aaa一定有可以生成多项式是xl+1x^{l}+1xl+1,并且其极小多项式f(x)∣xl+1f(x)|x

2021-01-14 15:45:57 1008

原创 Legendre符号可以在多项式内计算

Legendre符号可以在多项式内计算在密码学中,二次剩余是一个重要的问题。要知道二次同余式x2≡a(modm)x^{2}\equiv a \pmod{m}x2≡a(modm)是否有解,就要求Legendre符号(am)(\frac{a}{m})(ma​)的值(雅可比符号是Legendre符号的推广)。本篇讨论Legendre符号计算复杂性问题。1、问题假设ppp是一个奇素数,对任意整数yyy,Legendre符号(yp)(\frac{y}{p})(py​)定义如下:问:Legendre符号是否在

2021-01-10 21:55:34 691 5

原创 欧拉函数varphi(n)计算公式的证明

欧拉函数φ(n)\varphi(n)φ(n)计算公式的证明1、简介欧拉函数φ(n)\varphi(n)φ(n)指的是模nnn剩余类环中,与nnn互素的数的个数。我们知道若nnn的标准素数分解是n=∏i=1kpiein=\prod_{i=1}^{k}p_{i}^{e_{i}}n=∏i=1k​piei​​,则φ(n)=∏i=1k(piei−piei−1)=n∏i=1k(1−1pi)\varphi(n)=\prod_{i=1}^{k}(p_{i}^{e_{i}}-p_{i}^{e_{i}-1})=n\pr

2021-01-09 16:34:46 1806

原创 关于求解线性序列的极小多项式和线性复杂度的BM算法实操理解

关于求解线性序列的极小多项式和线性复杂度的BM算法实操理解在流密码中,线性反馈移位寄存器(LFSR)是非常重要部件。学过线性移位寄存器序列相关知识的朋友都知道,Berlekamp-Massey算法(以下简称BM算法)是求解序列的线性复杂度的有效的方法。网上有很多BM算法的流程,笔者在学习的时候,感觉对着流程能够计算序列的线性复杂度,但是如果是闭卷考试,这个过程也太难记住了!所以本篇重新理解了一下BM算法的求解流程,重在教你如何快速掌握BM算法的计算过程。 如果你已经了解BM算法,你可以直接看第3点。1、

2021-01-08 13:33:50 2730 3

原创 差分密码分析读书报告

分组密码的差分分析读书报告近期,学习了差分密码分析和线性密码分析,借此机会整理一下学习心得,方便自己梳理一遍知识,也能发出来和大家一起交流。本篇主要讲差分分析,如果有描述错误或者不准确的地方,欢迎大家在帖子下方回复,谢谢~1、简介1990年国际密码年会上,Biham和Shamir首次提出了对DES的差分攻击,从此国际上开启了分组密码分析的热潮[1]。差分分析方法是用于攻击分组密码的,准确地说,它是攻击迭代型分组密码最有效地方式之一,经过这么多年地发展,差分分析已经成为了衡量密码体制安全性的重要指标之一

2021-01-07 21:50:12 2393 12

genblock.json

genblock.json

2021-04-20

差分密码分析Python实现源代码.pdf

用python代码实现了差分攻击

2021-01-31

Beautiful Soup.pdf

爬虫中的BeautifulSoup库的自学笔记。讲述了常用函数和最基本的爬虫实例。

2021-01-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除