栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 组成栅栏的字母一般不会太多。 (一般不超过30个
凯撒 kqfl
brainfuck 语法由一个8个字符的字符集组成,即><+=.,[]
> 指针加一
< 指针减一
+ 指针指向的字节的值加一
- 指针指向的字节的值减一
. 按ASCII码输出指针指向字节内容
, 按ASCII码输入内容到指针指向字节
[ 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处
] 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处
维吉尼亚解密
flag 对应 pqcq
babyencoding
1.base64得到flag{dazzling_encoding#4e0ad4
2.base32得到f0ca08d1e1d0f10c0c7afe422fea7
3.uuencode得到c55192c992036ef623372601ff3a}
base64 只有64个字符(英文大小写、数字和+、/)以及用作后缀等号;能被4整除(不算用作后缀的等号); 等号一定用作后缀,且数目一定是0个、1个或2个。
base32 特征:密文由 32 个字符(A-Z,2-7)组成,末尾可能会有‘=’,但最多有6个。
UUencode的加密方式和base64很相似。 但他的编码表有很多是特殊字符:”!”#¥%&‘()*+=’” 等等。 XXencode的加密方式也和base64相似。 跟base64打印字符相比,就是UUencode多一个“-” 字符,少一个”/” 字符。
Base16——示例61646D696E
它的特点是没有等号并且数字要多于字母
30余种加密编码类型的密文特征分析(建议收藏)-腾讯云开发者社区-腾讯云 (tencent.com)
babyrsa
n和e封装为公钥,n和d封装为私钥
在选用公钥指数时,普遍认为65537更安全
from Crypto.Util.number import *
from flag import flag
def gen_prime(n):
res = 1
for i in range(15):
res *= getPrime(n)
return res
if __name__ == '__main__':
n = gen_prime(32)
e = 65537
m = bytes_to_long(flag)
c = pow(m,e,n)
print(n)
print(c)
n = 17290066070594979571009663381214201320459569851358502368651245514213538229969915658064992558167323586895088933922835353804055772638980251328261
c = 14322038433761655404678393568158537849783589481463521075694802654611048898878605144663750410655734675423328256213114422929994037240752995363595
from Crypto.Util.number import *
n = 17290066070594979571009663381214201320459569851358502368651245514213538229969915658064992558167323586895088933922835353804055772638980251328261
c = 14322038433761655404678393568158537849783589481463521075694802654611048898878605144663750410655734675423328256213114422929994037240752995363595
phi = euler_phi(n)
d = inverse_mod(65537,phi)
m = pow(c,d,n)
long_to_bytes(int(m))
# flag{us4_s1ge_t0_cal_phI}
Small d
from Crypto.Util.number import *
p = getPrime(1024)
q = getPrime(1024)
getPrime 返回N位随机素数
e = inverse(d, (p-1)*(q-1))
d = inverse_mod(65537,(p-1)*(q-1))
a = 'e9e3eee8f4f7bffdd0bebad0fcf6e2e2bcfbfdf6d0eee1ebd0eabbf5f6aeaeaeaeaeaef2'
c = bytes.fromhex(a)
key = ord('f') ^ c[0]
flag = []
for j in c:
flag.append(j ^ key)
print(bytes(flag))
# flag{x0r_15_symm3try_and_e4zy!!!!!!}