编码学
主要还是为了记一些常见编码的特征,这样子对未来做题也更加方便,RSA则是另外一块内容,是相当的重点
base64:两个等号
URL编码:%+16进制
Quoted-printable编码:16进制字符和等号”=”是最大的特征,例如
中文电码:每四位数字组成一个字符,可以理解为长度是4的倍数,并且全部都是数字(要注意的是,要先计数,数字串是不是4的倍数,然后再分组,四个四个的解密),例如07210821,可以分成0721和0821
unencode编码:对于长消息来说,每行的开头都是M,对于短消息来说特征就是字符串都有’($<>)这类字符
核心价值观编码:很简单,一把梭就行了,看到核心价值观就知道了
Ook编码:Ook+?或者!,一把梭就行
AAE=Encode编码: 长的很像一些符号的表情,直接梭就可以
音符编码: 很简单,五线谱就是了
MD编码: 字母要么全部都是大写,要么全部都是小写,再带上数字,一般来说是16位或者32位(一把梭撞库即可)
rot13加密: 只对字符串中的字母进行加密(标点符号和数字不进行任何操作),步数位13,分别再A-Z或a-z之间循环
摩斯密码,凯撒密码: 一把梭
猪圈密码: 字符转为图片的形式,只能自己手动干
quipquip加密:跟md5一样,爆破得到key,他的特点就是只替换字母,数字和标点符号均忽略
栅栏密码:很好认,赛博厨师一把梭
Rabbit加密: 特点是以U2FsdGVkX1开头,在题目没给密钥的情况下默认为空密钥
RSA部分基础内容
一般来说是求明文,但是要先学会求d(p,q,e求d)
跳转到另外一个入门视频看看:几个重要的数字 1因数,2质数,3余数
公钥与私钥问题:公钥应该是公开的,私钥只有一方知道,这就叫非对称加密
例如:公钥(7,33),私钥(?,33),私钥里的33和公钥里的33属于同一个数字,都是公开的,只有?这个数字不公开
公钥的加密可以用私钥来解密,同理:私钥的加密可以用公钥来解密,这里有一张很浅显的图可以用来帮助理解
这里对于公钥和私钥的选取是有点说法的,稍微看一下,关注一些T什么的就好了
第一部分
求d吗,那很有生活,用invert这个函数就可以实现快速求e
import gmpy2
p=473398607161
q=4511491
e=17
d=gmpy2.invert(e,((p-1)*(q-1)))
print(d)
第二部分__上强度
pqec求m(c为密文,m为明文)
import gmpy2
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e = 65537
c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
d=gmpy2.invert(e,(q-1)(p-1))
n=pq
这些都是些死东西,记住就可以,不用太深究
最后一步pow求明文m,记住cdn这个顺序
m=pow(c,d,n)
print(m)
第三部分——n为素数推出phi(phi就是欧拉函数)
n=p*q
欧拉函数的定义:对于一个正整数n,phi是小于n的正整数中与n互质的个数
当n是素数时,所有小于n的正整数都与n互质
对于pq
小于他俩的整数分别与他俩互质的数是p-1,q-1
并且因为他俩之间互质,所有相乘得到整个n的互质的个数
当n是素数时,所有小于n的正整数都与n互质
所以phi就是n-1