crypto

RAS算法

非对称加密算法RSA密匙生成步骤

    选择两个质数 p , q
    计算 n , n = p*q
    计算欧拉函数值 φ(pq) = (p-1)*(q-1)
    选择整数 e ,要求满足 1 < e < φ(pq)
    计算 d ,要求满足 ed ≡ 1 mod φ(pq) 也就是 ed mod φ(pq) = 1
    保存密匙对

攻防世界例题:

在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d

已知 p, q 可得n=2135733555619387051

通过脚本即可得d=125631357777427553

脚本如下

# 分解模数n
def rsa_moder(n):
    base = 2
    while base < n:
        if n % base == 0:
            return base, n // base
        base += 1


# 求欧拉函数f(n)
def rsa_get_euler(prime1, prime2):
    return (prime1 - 1) * (prime2 - 1)


# 求私钥
def rsa_get_key(e, euler):
    k = 1
    while True:
        if (((euler * k) + 1) % e) == 0:
            return (euler * k + 1) // e
        k += 1


# 根据n,e计算d(或根据n,d计算e)
def get_rsa_e_d(n, e=None, d=None):
    if e is None and d is None:
        return

    arg = e
    if arg is None:
        arg = d

    primes = rsa_moder(n)
    p = primes[0]
    q = primes[1]

    d = rsa_get_key(arg, rsa_get_euler(p, q))

    return d


def test():
    str_fmt = 'n: {:<10} e: {:<10} d: {:<10}'

    # 导入rsa库
    import rsa as rsa
    key = rsa.newkeys(24)

    # 产生rsa密钥对
    if isinstance(key[1], rsa.PrivateKey):
        print(str_fmt.format(key[1].n, key[1].e, key[1].d))

    # 解密
    n = 14666299
    d = 2101153
    e = get_rsa_e_d(n, None, d)
    print(str_fmt.format(n, e, d))

    n = 12748507
    e = 65537
    d = get_rsa_e_d(n, e, None)
    print(str_fmt.format(n, e, d))


if __name__ == '__main__':
    test()
#来自https://www.cnblogs.com/baigoogledu/p/9858091.html

PCY文件

pcy转py:python反编译 - 在线工具https://tool.lu/pyc/

幂数加密

百科内容:二进制幂数加密

二进制幂数加密法,由于英文字母只有26个字母。只要2的0、1、2、3、4、5次幂就可以表示31个单元。通过用二进制幂数表示字母序号数来加密。

由于4=2^2 所以D加密过之后是2;15=2^0+2^1+2^2+2^3所以O加密后是0123(4与15为字母在字母表中的排序)

攻防世界例题:8842101220480224404014224202480122(根据题干提示可以得知需分为八位)

88421  0122  048  02244  04  0142242  0248  0122

试了试没有二进制加密那么麻烦 因为第一串数字开头不为零  仅仅是将分隔开的数字相加 所得即为在字母中的排序

得到flag:23        5       12      12       4       15        14       5
                W         E         L       L        D       O         N        E

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值