攻防世界-Crypto-新手區(qū)

base64

base64編碼之后的字符串具有的特點(diǎn):

*字符串只可能包含A-Z儡陨,a-z,0-9册舞,+翔怎,/,=字符

*字符串長(zhǎng)度是4的倍數(shù)

* =只會(huì)出現(xiàn)在字符串最后,可能沒(méi)有或者一個(gè)等號(hào)或者兩個(gè)等號(hào)

工具https://www.sojson.com/base64.html

python代碼:(注意文件不要命名為base64.py,否則import base64錯(cuò)誤)

import base64

cipher = "Y3liZXJwZWFjZXtXZWxjb21lX3RvX25ld19Xb3JsZCF9"

plaintext = base64.b64decode(cipher)

print(plaintext)


Caesar

工具https://www.qqxiuzi.cn/bianma/kaisamima.php

python代碼

def caesar(cipher):

????????for j in range(26):

????????????????str_list = list(cipher)

????????????????i = 0

????????????????while i < len(cipher):

????????????????????????if not str_list[i].isalpha():

????????????????????????????????str_list[i] = str_list[i]

????????????????????????else:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?a = "A" if str_list[i].isupper() else "a"

????????????????????????????????str_list[i] = chr((ord(str_list[i]) - ord(a) + j) % 26 + ord(a))

????????????????????????i = i + 1

????????????????????????print(''.join(str_list))

if __name__ == '__main__':

????????cipher = "oknqdbqmoq{kag_tmhq_xqmdzqp_omqemd_qzodkbfuaz}"

????????caesar(cipher)


Morse

特征:

* 用點(diǎn)(.)和劃(-)來(lái)編碼范圍0-9、A-Z的字符拧晕,字母不區(qū)分大小寫(xiě)

* 兩個(gè)字母之間的空格用斜杠(/)或者三個(gè)點(diǎn)(.)或者一個(gè)劃(-)表示,兩個(gè)單詞之間的間隔是七個(gè)點(diǎn)(.)

* 根據(jù)摩斯編碼的原理梅垄,CTF中也有出現(xiàn)過(guò)變種的摩斯編碼防症,比如點(diǎn)(.)和劃(-)用數(shù)字0和1來(lái)表示等此類(lèi)變種的思路

工具http://ctf.ssleye.com/morse.html

python代碼

table ={'a': ".-", 'b': "-...", 'c': "-.-.", 'd': "-..", 'e': ".", 'f': "..-.", 'g': "--.", 'h': "....", 'i': "..", 'j': ".---", 'k': "-.-", 'l': ".-..", 'm': "--", 'n': "-.", 'o': "---", 'p': ".--.", 'q': "--.-", 'r': ".-.", 's': "...", 't': "-", 'u': "..-", 'v': "...-", 'w': ".--", 'x': "-..-", 'y': "-.--", 'z': "--..", '0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.', ',': '--..--', '.': '.-.-.-', ':': '---...', ';': '-.-.-.', '?': '..--..', '=': '-...-', "'": '.----.', '/': '-..-.', '!': '-.-.--', '-': '-....-', '_': '..--.-', '(': '-.--.', ')': '-.--.-', '$': '...-..-', '&': '. . . .', '@': '.--.-.'}

def morse(cipher):

????????msg = ''

????????codes = cipher.split(' ')

????????for code in codes:

????????????????if code == '':

????????????????????????msg += ' '

????????????????else:

????????????????????????UNCODE = dict(map(lambda t: (t[1], t[0]), table.items()))

????????????????????????msg += UNCODE[code]

????????????????return msg

if __name__ == '__main__':

????????cipher ="11 111 010 000 0 1010 111 100 0 00 000 000 111 00 10 1 0 010 0 000 1 00 10 110"

????????cipher = cipher.replace('1', '-')

????????cipher = cipher.replace('0', '.')

????????plaintext = morse(cipher)

????????print(plaintext)


混合編碼

步驟:①base64? ? ?②unicode? ? ?③base64? ? ?④unicode(要將/改為&#)


Railfence-----柵欄密碼

工具http://www.atoolbox.net/Tool.php?Id=777


不僅僅是Morse

步驟

①M(fèi)orse編碼(python代碼中要把“cipher = cipher.replace('1', '-')? ?cipher = cipher.replace('0', '.')”改為“cipher=cipher.repalce('/',' ')”? ? ?

培根密碼(倍康尼密碼、Bacon's cipher):僅僅由ab構(gòu)成哎甲;求解方式如下所示

工具https://tool.bugku.com/peigen/

python代碼

import re

table ={'a': 'aaaaa', 'b': 'aaaab', 'c': 'aaaba', 'd': 'aaabb', 'e': 'aabaa', 'f': 'aabab', 'g': 'aabba', 'h': 'aabbb', 'i': 'abaaa', 'j': 'abaab', 'k': 'ababa', 'l': 'ababb', 'm': 'abbaa', 'n': 'abbab', 'o': 'abbba', 'p': 'abbbb', 'q': 'baaaa', 'r': 'baaab', 's': 'baaba', 't': 'baabb', 'u': 'babaa', 'v': 'babab', 'w': 'babba', 'x': 'babbb', 'y': 'bbaaa', 'z': 'bbaab'}

def bacon(cipher):

????????msg = ''

????????codes = re.findall(r'.{5}', cipher)

????????for code in codes:

????????????????if code == '':

????????????????????????msg += ' '

????????????????else:

????????????????????????UNCODE = dict(map(lambda t: (t[1], t[0]), table.items()))

????????????????????????msg += UNCODE[code]

????????return msg

if __name__ == '__main__':

????????cipher = 'aaaaabaabbbaabbaaaaaaaabaababaaaaaaabbabaaabbaaabbaabaaaababaabaaabbabaaabaaabaababbaabbbabaaabababbaaabbabaaabaabaabaaaabbabbaabbaabaabaaabaabaabaababaabbabaaaabbabaabba'

????????plaintext = bacon(cipher)

????????print(plaintext)


冪數(shù)加密/云影密碼

python代碼

#二進(jìn)制冪數(shù)加密/云影密碼

a=str(input("密文:"))

a=a.split("0")

flag=''

for i in range(0,len(a)):

????????str = a[i]

????????list=[]

????????sum=0

????????for j in str:

????????????????list.append(j)

????????????????length = len(list)

????????for k in range(0,length):

????????????????sum+=int(list[k])

????????flag+=chr(sum+64)

print("明文為:",flag)


easy_RSA(已知p蔫敲、q、e炭玫,求d 或 已知p奈嘿、q、d吞加,求e)

python代碼

def rsa_moder(n):

? ? ? ? base=2

? ? ? ? while base<n:

? ? ? ? ? ? ? ? if n%base==0:

? ? ? ? ? ? ? ? ? ? ? ? return base,n//base

? ? ? ? ? ? ? ? base+=1

def rsa_get_euler(prime1,prinme2):#求歐拉函數(shù)

? ? ? ? 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

def get_rsa_e_d(n,e=None,d=None):

? ? ? ? if e is None and d is None:

? ? ? ? ? ? ? ? return 0

? ? ? ? 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

p=int(input("p="))

q=int(input("q="))

n=p*q

e=int(input("e="))

d=get_rsa_e_d(n,e,None)

print("d=",d)


easychallenge

.pyc文件

* 由py文件經(jīng)過(guò)編譯后裙犹,生成的文件

* pip install uncompyle6? (安裝uncompyle6庫(kù),用于反編譯)

* 進(jìn)入.pyc文件所在的文件夾衔憨,然后uncomplyle6 -o . easychallenge.pyc叶圃,即可在該文件夾中得到.py文件

得到的easychallenge.py文件

# uncompyle6 version 3.6.5

# Python bytecode 2.7 (62211)

# Decompiled from: Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)]

# Embedded file name: ans.py

# Compiled at: 2018-08-09 11:29:44

import base64

def encode1(ans):

????????s = ''

????????for i in ans:

????????????????x = ord(i) ^ 36

????????????????x = x + 25

????????????????s += chr(x)

????????return s

def encode2(ans):

????????s = ''

????????for i in ans:

????????????????x = ord(i) + 36

????????????????x = x ^ 36

????????????????s += chr(x)

????????return s

def encode3(ans):

????????return base64.b32encode(ans)

flag = ' '

print 'Please Input your flag:'

flag = raw_input()

final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='

if encode3(encode2(encode1(flag))) == final:

????????print 'correct'

else:

????????print 'wrong'

根據(jù)上面的easychallenge.py文件,寫(xiě)求逆程序(easychallenge_resolve.py)

import base64

def decode1(s):

????????ans=''

????????for x in s:

????????????????x=ord(x)-25

????????????????i=x^36

????????????????ans+=chr(i)

????????return ans

def decode2(s):

????????ans=''

????????for x in s:

????????????????x=x^36

????????????????i=x-36? ? ?

????????????????ans+=chr(i)

????????return ans

def decode3(ans):

????????return base64.b32decode(ans)

if __name__=="__main__":

????????final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='

????????flag=decode1(decode2(decode3(final)))

????????print("flag=",flag)


Normal_RSA

將flag.enc和pubkey.pem放入kali虛擬機(jī)中践图,在終端打開(kāi)掺冠,輸入“openssl rsa -pubin -text -modulus -in warmup -in pubkey.pem”

得到的Modulus即為n,Exponent即為e

將得到的Modulus=....轉(zhuǎn)化為十進(jìn)制(工具)為87924348264132406875276140514499937145050893665602592992418171647042491658461码党,即為n

大數(shù)分解德崭,得到:
p=275127860351348928173285174381581152299
q=319576316814478949870590164193048041239

在終端中輸入“python rsatool.py -o private.pem -e 65537 -p 275127860351348928173285174381581152299 -q 319576316814478949870590164193048041239”

將flag.enc放在rsatool文件夾中斥黑,在終端打開(kāi),輸入“openssl rsautl -decrypt -in flag.enc -inkey private.pem”


轉(zhuǎn)輪機(jī)加密

python代碼

import re

sss='''1:< ZWAXJGDLUBVIQHKYPNTCRMOSFE < 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 3:< BDMAIZVRNSJUWFHTEQGYXPLOCK < 4: < RPLNDVHGFCUKTEBSXQYIZMJWAO < 5:< IHFRLABEUOTSGJVDKCPMNZQWXY < 6: < AMKGHIWPNYCJBFZDRUSLOQXVET < 7:< GWTHSPYBXIZULVKMRAFDCEONJQ < 8: < NOZUTWDCVRJLXKISEFAPMYGHBQ < 9:< XPLTDSRFHENYVUBMCQWAOIKZGJ < 10: < UDNAJFBOWTGVRSCZQKELMXYIHP <11 < MNBVCXZQWERTPOIUYALSKDJFHG < 12 < LVNCMXZPQOWEIURYTASBKJDFHG <13 < JZQAWSXCDERFVBGTYHNUMKILOP <'''

m="NFQKSEVOQOFNP"

content=re.findall(r'<(.*?) <',sss,re.S)

iv=[2,3,7,5,13,12,9,1,8,10,4,11,6]

vvv=[]

ans=""

for i in range(13):??

????????index=content[iv[i]-1].index(m[i])??

????????vvv.append(index)

for i inrange(0,26):??

????????flag=""??

????????for j in range(13):??????

????????????????flag+=content[iv[j]-1][(vvv[j]+i)%26]??

????????print(flag)


easy_ECC

ECC:橢圓加密算法眉厨,ECC橢圓曲線加密學(xué)習(xí)筆記锌奴、橢圓曲線的奇妙比喻

python代碼

import collections

def inverse_mod(k, p):
????????"""Returns the inverse of k modulo p. This function returns the only integer x such that (x * k) % p == 1. k must be non-zero and p must be a prime. """
? ? ? ? if k == 0:
? ? ? ? ? ? ? ? raise ZeroDivisionError('division by zero')
? ? ? ? if k < 0:
????????????????# k ** -1 = p - (-k) ** -1 (mod p)
? ? ? ? ? ? ? ? return p - inverse_mod(-k, p)
? ? ? ? # Extended Euclidean algorithm.
? ? ? ? s, old_s = 0, 1
? ? ? ? t, old_t = 1, 0
? ? ? ? r, old_r = p, k
? ? ? ? while r != 0:
? ? ? ? ? ? ? ? quotient = old_r // r
? ? ? ? ? ? ? ? old_r, r = r, old_r - quotient * r
? ? ? ? ? ? ? ? old_s, s = s, old_s - quotient * s
? ? ? ? ? ? ? ? old_t, t = t, old_t - quotient * t
? ? ? ? gcd, x, y = old_r, old_s, old_t
? ? ? ? assert gcd == 1
? ? ? ? assert (k * x) % p == 1
? ? ? ? return x % p

# Functions that work on curve points #
def is_on_curve(point):?
?"""Returns True if the given point lies on the elliptic curve."""
? ? ? ? if point is None:
? ? ? ? ? ? ? ? # None represents the point at infinity.
? ? ? ? ? ? ? ? return True
? ? ? ? x, y = point
? ? ? ? return (y * y - x * x * x - curve.a * x - curve.b) % curve.p == 0

def point_neg(point):
????????"""Returns -point."""
? ? ? ? assert is_on_curve(point)
? ? ? ? if point is None:?
? ? ? ? ? ? ? ?# -0 = 0
? ? ? ? ? ? ? ? return None
? ? ? ? x, y = point
? ? ? ? result = (x, -y % curve.p)
? ? ? ? assert is_on_curve(result)
? ? ? ? return result

def point_add(point1, point2):
????????"""Returns the result of point1 + point2 according to the group law."""
? ? ? ? assert is_on_curve(point1)
? ? ? ? assert is_on_curve(point2)
????????if point1 is None:
?????????????????# 0 + point2 = point2
? ? ? ? ? ? ? ? return point2
? ? ? ? if point2 is None:
????????????????# point1 + 0 = point1
????????????????return point1
????????x1, y1 = point1
? ? ? ? x2, y2 = point2
? ? ? ? if x1 == x2 and y1 != y2:
? ? ? ? ? ? ? ? # point1 + (-point1) = 0
? ? ? ? ? ? ? ? return None
? ? ? ? if x1 == x2:
? ? ? ? ? ? ? ? # This is the case point1 == point2.
? ? ? ? ? ? ? ? m = (3 * x1 * x1 + curve.a) * inverse_mod(2 * y1, curve.p)
? ? ? ? else:
? ? ? ? ? ? ? ? # This is the case point1 != point2.
? ? ? ? ? ? ? ? m = (y1 - y2) * inverse_mod(x1 - x2, curve.p)
? ? ? ? x3 = m * m - x1 - x2
? ? ? ? y3 = y1 + m * (x3 - x1)
? ? ? ? result = (x3 % curve.p, -y3 % curve.p)
????????assert is_on_curve(result)
? ? ? ? return result

def scalar_mult(k, point):
? ? ? ? """Returns k * point computed using the double and point_add algorithm."""
? ? ? ? assert is_on_curve(point)
? ? ? ? if k < 0:
? ? ? ? ? ? # k * point = -k * (-point)
? ? ? ? ? ? return scalar_mult(-k, point_neg(point))
? ? ? ? result = None
? ? ? ? addend = point
? ? ? ? while k:
? ? ? ? ? ? ????if k & 1:
? ? ? ? ? ? ? ? ? ? ? ? # Add.
????????????????????????result = point_add(result, addend)
? ? ? ? ? ? ? ? # Double.
? ? ? ? ? ? ? ? addend = point_add(addend, addend)
? ? ? ? ? ? ? ? k >>= 1
? ? ? ? assert is_on_curve(result)
? ? ? ? return result

# Keypair generation and ECDHE #
def make_keypair():
? ? ? ? """Generates a random private-public key pair."""
? ? ? ? private_key = curve.n
? ? ? ? public_key = scalar_mult(private_key, curve.g)
? ? ? ? return private_key, public_key

EllipticCurve = collections.namedtuple('EllipticCurve', 'name p a b g n h')
curve = EllipticCurve(
? ? ? ? 'secp256k1',
? ? ? ? # Field characteristic.
? ? ? ? p=15424654874903,
? ? ? ? # Curve coefficients.
? ? ? ? a=16546484,
? ? ? ? b=4548674875,
? ? ? ? # Base point.
? ? ? ? g=(6478678675,5636379357093),
? ? ? ? # Subgroup order.
? ? ? ? n=546768,
? ? ? ? # Subgroup cofactor.
? ? ? ? h=1,
)
private_key, public_key = make_keypair()
print("private key:", hex(private_key))
print("public key: (0x{:x}, 0x{:x})".format(*public_key))
print("x + y = " + str(public_key[0] + public_key[1]))



參考:XCTF-攻防世界-密碼學(xué)crypto-新手練習(xí)區(qū)-writeup

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市憾股,隨后出現(xiàn)的幾起案子鹿蜀,更是在濱河造成了極大的恐慌,老刑警劉巖服球,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耻姥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡有咨,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)蒸健,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)座享,“玉大人,你說(shuō)我怎么就攤上這事似忧≡眩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵盯捌,是天一觀的道長(zhǎng)淳衙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)饺著,這世上最難降的妖魔是什么箫攀? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮幼衰,結(jié)果婚禮上靴跛,老公的妹妹穿的比我還像新娘。我一直安慰自己渡嚣,他們只是感情好梢睛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著识椰,像睡著了一般绝葡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腹鹉,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天藏畅,我揣著相機(jī)與錄音,去河邊找鬼功咒。 笑死墓赴,一個(gè)胖子當(dāng)著我的面吹牛竞膳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诫硕,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼坦辟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了章办?” 一聲冷哼從身側(cè)響起锉走,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎藕届,沒(méi)想到半個(gè)月后挪蹭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡休偶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年梁厉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踏兜。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡词顾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碱妆,到底是詐尸還是另有隱情肉盹,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布疹尾,位于F島的核電站上忍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏纳本。R本人自食惡果不足惜窍蓝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望繁成。 院中可真熱鬧它抱,春花似錦、人聲如沸朴艰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)祠墅。三九已至侮穿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間毁嗦,已是汗流浹背亲茅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人克锣。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓茵肃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親袭祟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子验残,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 0x01 base64 元宵節(jié)燈謎是一種古老的傳統(tǒng)民間觀燈猜謎的習(xí)俗。 因?yàn)橹i語(yǔ)能啟迪智慧又饒有興趣巾乳,燈謎增添節(jié)日...
    Hf1dw閱讀 18,803評(píng)論 1 6
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,030評(píng)論 0 2
  • 定義枚舉 項(xiàng)目中用到的手勢(shì)解鎖您没,網(wǎng)上搜到了一位大神所封裝的,用起來(lái)很方便 KMNineBoxView是繼承UIVi...
    神一樣的隊(duì)友閱讀 1,190評(píng)論 1 0
  • 譯者語(yǔ):我沒(méi)有任何技術(shù)背景胆绊,翻譯這篇文章挺費(fèi)勁氨鹏,Google,維基百科左右相伴压状。感謝我的同事仆抵,程序宋少和美術(shù)李大師...
    Ginny閱讀 470評(píng)論 0 1
  • 一.題目 二.解題過(guò)程 1.打開(kāi)附件,考察ECC加密 2.參考腳本: importcollections impo...
    Du1in9閱讀 1,031評(píng)論 0 0