WEEK1|CRYPTO

栅栏密码,就是把要加密的明文分成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!!!!!!}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值