学习笔记-CTF密码相关

RSA共模攻击

RSA基本原理

①  选择两个大的质数p和q,N=pq;

②  根据欧拉函数,求得r=(p-1)(q-1);

③  选一个小于r的整数e,求得e关于模r的模反元素d;

④  将p和q的记录销毁;

⑤  公钥为(N,e),私钥为(N,d)

加密:

将消息转换为小于N的整数n,

通过n^e≡c(mod N)

得到密文c

解密:

通过c^d≡n(mod N)

将密文c变为原文n

共模攻击原理:

当N相同时,找到两个互质的e,在已知N、c1、c2、e1、e2的情况下,

c1=m^e1%N

c2=m^e2%N

可通过公式e1s1+e2s2=1,解得s1和s2两个整数

最终得到c1^s1*c2^s2=m

凯撒密码

加密:

En(x)=(x+n) mod 26

解密:

Dn(x)=(x-n) mod 26

其中偏移量n为大于等于1小于26的整数

原理:明文中的所有字母按照偏移量n偏移后被替换为密文。

维吉尼亚密码

——古典密码中需要密钥的密码

加密:

Ci≡Pi+Ki(mod 26)

解密:

Pi≡Ci-Ki(mod 26)

其中K为密钥

维吉尼亚密码表:

猪圈密码

 两种加解密方式

一:图形和字母变换

例:

二:左右一一对应变换

 Python脚本实现:

import sys

def pigpen_chiper(letter):
    a = "abcdefghistuv"
    b = "jklmnopqrwxyz"
    if letter.isalpha():
        if letter in a:
            n = a.find(letter)
            pig = b[n]
        else:
            n = b.find(letter)
            pig = a[n]
        return pig
    else:
        return letter

def pigpen(word):
    """
     pigpen chiper
    """
    res = ''
    for letter in word:
        res += pigpen_chiper(letter)
    return res

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print "Pigpen_chiper decode 猪圈密码解密器v1.0 BY 0h1in9e"
        print "Usage: "+sys.argv[0]+" 'ocjp{zkii}'"
    else:
        print pigpen(sys.argv[1])

AAencode

扩展:ppencode/rrencode/jjencode

参考URL:https://www.cnblogs.com/android-html5/archive/2011/02/09/2533784.html

Rabbit密码

一种流密码

在线加解密URL:http://www.sojson.com/encrypt_rabbit.html

栅栏密码

原理:①将要传递的信息交替排成上下两行;②将下面一行字母排在上面一行后边形成密文。

例:

原文地址:https://www.cnblogs.com/Dio-Hch/p/12745628.html