Crypto


title: CRYPTO


知识点

inverse(e, a)

概念版:

公钥的获取

def get_D(e,phi):
    i=1
    while True:
    	i = i + 1
        if (e*i) % p == 1:
            return i

libnum.s2n()

User
a = 'aa'
print(libnum.s2n(a))
为什么等于24929
libnum.s2n 函数将字符串转换为整数的方法是将字符串视为一个大整数的十进制表示。在这种表示方法中,每个字符对应一个 ASCII 码,然后将这些 ASCII 码连接起来组成一个大整数。因此,字符串 'aa' 被转换为整数时,实际上是将 'a' 和 'a' 的 ASCII 码连接起来组成一个整数。
具体计算为:ord('a') * 256 + ord('a') = 97 * 256 + 97 = 24929。

b’aa’

b'aa' 表示一个字节字符串(bytes string)对象,其中 'aa' 是字节的序列。在 Python 中,字节字符串用 b 前缀表示,用于表示二进制数据而不是文本数据。

在这种情况下,b'aa' 表示由两个字节组成的字节字符串,每个字节表示一个 ASCII 字符。b'aa' 可以看作是一个长度为 2 的字节序列,其中第一个字节的值是 97(ASCII 码中的 'a'),第二个字节的值也是 97

字节字符串和字符串有什么区别

数据类型:普通字符串是由 Unicode 字符组成的序列,而字节字符串是由字节(byte)组成的序列。

表示方式:普通字符串使用单引号、双引号或三引号来表示,而字节字符串使用 b 前缀加上引号(例如 b'hello')来表示。

可变性:普通字符串是不可变的(immutable),即创建后不能修改。而字节字符串是可变的(mutable),可以修改其中的字节。

字符集:普通字符串可以包含任意 Unicode 字符,而字节字符串只能包含 ASCII 范围内的字节(0-255)。

操作方式:普通字符串支持字符串操作,如拼接、分割、查找子字符串等。字节字符串则支持字节操作,如按字节索引访问、切片、字节串连接等。

long_to_chars

import libnum
from Crypto.Util.number import *


def long_to_chars(long):
    chars = ''
    while long:
        mod_ = long % 256
        s = chr(mod_)
        chars += s
        long //= 256
    return chars[::-1]


def chars_to_long(ss):
    long = 0
    for s in ss:
        long += ord(s)
        long *= 256
    long = long // 256
    return long


print(long_to_bytes(24929))
print(chars_to_long("aa"))

baigeiRSA *

import libnum
from Crypto.Util import number
n = 88503001447845031603457048661635807319447136634748350130947825183012205093541
c = 40876621398366534035989065383910105526025410999058860023908252093679681817257
size = 128
e = 65537
p = number.getPrime(size)
q = number.getPrime(size)
n = p*q
m = libnum.s2n(flag)
c = pow(m, e, n)
print('n = %d' % n)
print('c = %d' % c)
from Crypto.Util.number import *
n = 88503001447845031603457048661635807319447136634748350130947825183012205093541
c = 40876621398366534035989065383910105526025410999058860023908252093679681817257
p = 274539690398523616505159415195049044439
q = 322368694010594584041053487661458382819
e = 65537
phi = (p-1)*(q-1)
d = inverse(e, phi)
flag = long_to_bytes(pow(c, d, n))
print(flag)

baigeiRSA2 **

import libnum
from Crypto.Util import number
from functools import reduce
from secret import flag

n = 5
size = 64
while True:
    ps = [number.getPrime(size) for _ in range(n)]
    if len(set(ps)) == n:
        break

e = 65537
n = reduce(lambda x, y: x*y, ps)
m = libnum.s2n(flag)
c = pow(m, e, n)

print('n = %d' % n)
print('c = %d' % c)
'''
n = 175797137276517400024170861198192089021253920489351812147043687817076482376379806063372376015921
c = 144009221781172353636339988896910912047726260759108847257566019412382083853598735817869933202168
'''
from Crypto.Util.number import *
def long_to_chars(long):
    chars = ''
    while long:
        mod_ = long % 256
        s = chr(mod_)
        chars += s
        long //= 256
    return chars[::-1]
n = 175797137276517400024170861198192089021253920489351812147043687817076482376379806063372376015921
c = 144009221781172353636339988896910912047726260759108847257566019412382083853598735817869933202168
e = 65537
r = 9401433281508038261
t = 13716847112310466417
y = 11855687732085186571
u = 11215197893925590897
i = 10252499084912054759
a = (r - 1) * (t - 1) * (y - 1) * (u - 1) * (i - 1)
d = inverse(e, a)
m = pow(c, d, n)
mm = long_to_chars(m)
print(mm)

[简单] 初识RSA *

from Crypto.Util.number import bytes_to_long,inverse,getPrime
from flag import flag

m = bytes_to_long(flag)
p = getPrime(1024)
q = getPrime(1024)
n = p*q
print(n)
e = 65537
c = pow(m,e,n)
pq = p*(q-1)
qp = q*(p-1)
print("c=",c)
print("n=",n)
print("pq=",pq)
print("qp=",qp)
from Crypto.Util.number import *
def long_to_chars(long):
    chars = ''
    while long:
        mod_ = long % 256
        s = chr(mod_)
        chars += s
        long //= 256
    return chars[::-1]


c = 8722269075970644434253339592758512788160408912707387632591552130175707843950684315083250494010055435391879036285103810263591951437829414438640307561645721347859659807138051841516634704123100270651976676182059252251162982609391666023674158274992400910869692389001622774140191223807887675081808561012755545464977015973615407965906513878979919700065923364884766974187303774330319143647840846354404070430118235352622445115153298578370521811697710289716188726587743282814946239856766713516166990341116198180068191759095913957606379780234116317390622824096667107736103270907349927467971817639795094030622157581511033950777
n = 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074584935050067254029262890188260006596141011807724688556673520261743199388391094490191001701011230322653422314758778116196105077883955436582364267530633358016652912054880813710531145973799193443828969535902856467548523653920307742364119002349899553478815101092655897400295925170383678499125295006364960124859003
pq = 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074488896197029704465200125337817646702009123916866455067019234171839614862660036737875747177391796376553159880972782837853473250804807544086701088829096838316550146794766718580877976153967582795248676367265069623900208276878140709691073369415161936376086988069213820933152601453587292943483693378833664901178324
qp = 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074475956379708898904933143429835002718457573266164923043251954374464149976302585916538814746811455883837138715445492053610047383292461097590195481556557381952895539341802954749542143253491617052100969586396996063822508764438280468492894012685918249843558593322831683872737943676955669923498182824352081785243246
# pq-p+qp-q
# pq-q-p+1
phi = qp+pq-n+1
e = 65537
d = inverse(e, phi)
flag = long_to_chars(pow(c, d, n))
print(flag)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值