一个数的倒数是15/8这个数的1/3是多少?

为了在计算机中表示字符,在设计编码的时候用1个字节也就是8bit位数来编码英文字符集

可见字符的十六进制表示:

可见字符的十进制表示:

可见字符的二进制表示:

如果 URL 中出现了拉丁字母、阿拉伯数字、. -_~ 外的符号,则必须 使用百分号编码,所以 URL 编码也称为百分号编码。
如你在浏览器地址栏上看到:/s?wd=春节


我们知道,ASCII 的一个字符对应 8 比特,所以3个字 符对应4个Base64 位。
例如:fff→二进制表示为0
不足 3 的倍数怎么办,直接在末尾填充全 0 。
填充几个字节就再最后加上几个 =
所以base64只可能有一个=号或者两个=号

base16的表现形式就是16进制的ascii字符串表示
建议遇到base系列的多尝试几种base系列的解码

  • 字符之间的停顿:000
  • 单词之间的停顿:0000000

其他形式的编码表现形式


上面说的几种都是单表代换密码。
在单表替换加密中,所有的加密方式几乎都有一个共性,那就是明密文一一对应
密钥空间小,直接爆破。
密钥空间大,尝试统计分析找到攻击点!

在学习了凯撒大帝使用的神奇密码后,密码前辈们有创造出了更为奇异的加密方法。本题出题者喜欢用helloworld当密钥,密文如下:dlpcsegkshrij,请破解后提交。附录是一张似乎有用的表。答案为非常规形式。

希尔(Hill)密码:基于矩阵乘法


培根(Bacon)密码


现代密码体制(系统)由五部分组成:

    对称加密体制:加密密钥等于或约等于解密密钥,主要分为流加密和分组加密。
    流密码(Stream Cipher):利用一个较短的种子密钥,通过密 钥流产生器,生成伪随机的密钥流,与明文逐比特异或,得到密文。
    根据异或运算的性质,解密算法也是异或运算。

公钥加密体制(双钥加密体制):加密密钥(公开)≠ 解密密钥(保密) 加密算法 ≠ 解密算法。
安全性主要是基于数学上的计算困难问题,如大数分解RSA、离散对数、椭圆曲线上离散对数等。

LFSR(线性反馈移位寄存器)

理论上基于大数分解的困难性,即分解模数N的困难性
但随着计算机计算能力的发展,为了确保模数N不被分解,N需要取得越来越大。

首先,我这边就不放冗长的百度百科的东西了,我概括一下我自己对RSA的看法。
RSA是一种算法,并且广泛应用于现代,用于保密通信。
RSA算法涉及三个参数,n,e,d,其中分为私钥和公钥,私钥是n,d,公钥是n,e
n是两个素数的乘积,一般这两个素数在RSA中用字母p,q表示
一般CTF就是把我们想要获得的flag作为明文,RSA中表示为m。然后通过RSA加密,得到密文,RSA中表示为C。

一般来说,n,e是公开的,但是由于n一般是两个大素数的乘积,所以我们很难求解出d,所以RSA加密就是利用现代无法快速实现大素数的分解,所存在的一种安全的非对称加密。


p和q相差过大或过小,如上例。

其中若p和q的值相差较小,或者较大,都会造成n更容易分解的结果

因为p和q十分接近,所以可以使用yafu直接分解

通过在此类网站上查询n,如果可以分解或者之前分解成功过,那么可以直接得到p和q

当题目给的多对公钥n是公用了一个素数因子的时候,可以尝试公约数分解

所以当题目给了多个n,并且发现n无法分解,可以尝试是否有公约数。

求公约数可以使用欧几里得辗转相除法,实现python脚本如下

首先了解一下什么是dp、dq

这种参数是为了让解密的时候更快速产生的。

假设题目给出公钥n,e以及dp

我们可以通过n,e,dp求解私钥d。

以下推导过程如果有问题欢迎指正

我们将式1带入式2可以得到

求出p-1,求的方法也很简单,遍历65537种可能,其中肯定有一个p可以被n整除那么求出p和q,即可利用

注:这里的-1为逆元,不是倒数的那个-1

首先用公约数分解可以分解得到n1、n2的因子
但是发现e和φ(n)是不互为素数的,所以我们无法求出私钥d。

也就是说,e和φ(n)不互素且具有公约数79858


公钥n由多个素数因子组成

因为这题的公钥n是由四个素数相乘得来的,
其中四个素数的值相差较小,或者较大,都会造成n更容易分解的结果

因为p、q、r、s十分接近,所以可以使用yafu直接分解

明文过小,导致明文的e次方仍然小于n明文的三次方虽然比n大,但是大不了多少
小明文攻击是基于低加密指数的,主要分成两种情况。

明文过小,导致明文的e次方仍然小于n

这种情况直接对密文e次开方,即可得到明文

明文的三次方虽然比n大,但是大不了多少

爆破即可,每次加上一个n


如果选取的加密指数较低,并且使用了相同的加密指数给一个接受者的群发送相同的信息,那么可以进行广播攻击得到明文。
这个识别起来比较简单,一般来说都是给了三组加密的参数和明密文,其中题目很明确地能告诉你这三组的明文都是一样的,并且e都取了一个较小的数字。

主要利用的是私钥d很小,表现形式一般是e很大

github上有开源的攻击代码

识别:若干次加密,e不同,n相同,m相同。就可以在不分解n和求d的前提下,解出明文m。

首先,两个加密指数互质:
即存在s1、s2使得:



RSA是一种算法,并且广泛应用于现代,用于保密通信。
RSA算法涉及三个参数,n,e,d,其中分为私钥和公钥,私钥是n,d,公钥是n,e
n是两个素数的乘积,一般这两个素数在RSA中用字母p,q表示
一般CTF就是把我们想要获得的flag作为明文,RSA中表示为m。然后通过RSA加密,得到密文,RSA中表示为C。

一般来说,n,e是公开的,但是由于n一般是两个大素数的乘积,所以我们很难求解出d,所以RSA加密就是利用现代无法快速实现大素数的分解,所存在的一种安全的非对称加密。



对于字符串格式的验证语法

所有的计算机语言,正则表达式都是完全相同的

注:对于我们前端而言,正则表达式只需要会使用就可以了,一般不会再自己写需要的正则表达式

构造函数创建正则表达式

验证字符串内容是否符合正则表达式语法规范

如果符合,返回值是true

如果不符合,返回值是false

作用效果和html中的字符实体相同

使用特殊的符号表示对应的字符内容,防止程序执行冲突

正则表达式 -- 元字符

具有特殊验证规范的关键词/运算符

//只定义 \d,字符串中只要有数字就可以 //只要有数字,结果就是true //都不是数字,结果就是false //只定义 \D,字符串中只要有非数字就可以 //只要有非数字,结果就是true //都是数字,结果就是false //只定义 \s,字符串中只要有空格就可以 //只要有空格,结果就是true //字符实体 在 html中 才会被识别成 对应的执行效果 //在 js中 只是 字符串内容而已 不会被识别解析 //只要不是非换行,结果就是true //只有换行,结果才是false

正则表达式 -- 边界符

//以数字开头,结果就是true
//以数字结尾,结果就是true
//从开头至结尾,只能是数字,并且只能有一个数字
 

正则表达式 -- 限定符

 
 
 
//从头到结尾,只能是数字,数字的个数是0 ~ 正无穷
 
//从开头到结尾,只能是数字,数字的个数是1 ~ 正无穷
 
//从开头到结尾,只能是数字,数字的个数是0 ~ 1
 
//从开头到结尾,只能是数字,数字的个数只能是3
 
//从开头到结尾,只能是数字,数字个数是3 ~ 正无穷
 
//从开头到结尾,只能是数字,数字的个数是3 ~ 5
 

正则表达式 -- 特殊符号

 
 
将()中的内容·作为一个整体
只要是[ ]中定义的内容就可以
n - m的内容都可以
 
 

配合正则表达式的字符串函数

 
 
//查询大写字符A,不区分大小写
//也就是a A都可以
//默认替换第一个符合的字符
//替换所有符合的字符
 

 

正则表达式不能解析变量

如果正则表达式中需要解析变量

1、使用模板字符串将变量解析

 
 //给button标签添加点击事件
 //获取input标签中的数据
 
 //使用模板字符串解析含有变量的正则表达式
 //解析的结果只是字符串而已
 //没有正则表达式的功能,需要使用eval()来执行
 
 //执行字符串调换操作,将结果写入span标签
 //使用eval()执行正则字符串
 

我要回帖

更多关于 倒数等于它本身的数是1和-1对吗 的文章