往年领航杯crypto几道例题以及哈希函数介绍

往年领航杯crypto几道例题以及哈希函数介绍

Zz1f

2025-04-26 发布33 浏览 · 1 点赞 · 1 收藏
  • Evaluate(2024领航杯)
    题目给定脚本:

    python
    		#!/usr/bin/env python
    
    		# -*- coding: utf-8 -*-
    
    		from Crypto.Util.number import bytes_to_long
    
    		from secret import flag
    
    		import random
    
    		import gmpy2
    
    
    
    		def genPrime():
    
    		while True:
    
    		p = random.getrandbits(512)
    
    		tp = random.getrandbits(20)
    
    		if gmpy2.is_prime(p**4 + tp):
    
    		return p**4 + tp, tp
    
    
    
    		p, tp = genPrime()
    
    		q, tq = genPrime()
    
    		m = bytes_to_long(flag)
    
    		e = 0x10001
    
    		n = p*q
    
    		c = pow(m, e, n)
    
    		print("n = %s" % n)
    
    		print("e = %s" % e)
    
    		print("c = %s" % c)
    
    		print("tp = %s" % tp)
    
    		print("tq = %s" % tq)
    
    
    
    		# n = 348633861268974800987621543594391794050602576251154974984659464183689670557042154278476974697016453490819201785300358784253012923228243097332134404026242910925604588584038259315315228893889444939843669749257486949708860998561814051925074671606923444410295823305005631529086726536147080895602477663228560616676262170405451819508135377950748303706440414601010930562462659426049400683721959339610715750999514705160092064778069808917777152514518960915921397885010454299837700178137473176559506632775878504970727133195589627719000777342134690163930795976672849558173904352382711840948912634106992816013078110687913395982200522940389367833394880385914293130497753278649559529676510017019182246185738847006734386951590377969081341642471461851623729419475374687711926818016925130183445353022168148152613275378217305521229419905775407833666184116147956331221347245953176211884420812539281755782597765958348682860931540219177981167631729560430872329478453669808198420220568111802596917628247419801000380051883682016016893011257266195403820466085438260532078126518195549771986252677929871971069350126010168872556301769401538273100167581309470241064559591540046250697280422023839907314367021570351907528865821217382408249845415366037174707949
    
    		# e = 65537
    
    		# c = 2029656581237293016952908235880057206806644173832719935704640945848901561761089234861101719729724019931137128223756190165141914417055571433017319490259974011206525465263346146517000169092574183895629262250466852582191567396098508457369873321188239005453912948618322346103864033312983023173663683466050882280697
    
    		# tp = 954221
    
    		# tq = 875057
    		```
    

看到题目,可以看出p,q都是以特殊的方式生成的,所以这个n也得用特殊方法分解,底下是对题目的分析:Evaluate1.png
Evaluate2.png
通过这个可以来写出这题的解题脚本
```
python
import gmpy2

from Crypto.Util.number import inverse, long_to_bytes

  

n = 348633861268974800987621543594391794050602576251154974984659464183689670557042154278476974697016453490819201785300358784253012923228243097332134404026242910925604588584038259315315228893889444939843669749257486949708860998561814051925074671606923444410295823305005631529086726536147080895602477663228560616676262170405451819508135377950748303706440414601010930562462659426049400683721959339610715750999514705160092064778069808917777152514518960915921397885010454299837700178137473176559506632775878504970727133195589627719000777342134690163930795976672849558173904352382711840948912634106992816013078110687913395982200522940389367833394880385914293130497753278649559529676510017019182246185738847006734386951590377969081341642471461851623729419475374687711926818016925130183445353022168148152613275378217305521229419905775407833666184116147956331221347245953176211884420812539281755782597765958348682860931540219177981167631729560430872329478453669808198420220568111802596917628247419801000380051883682016016893011257266195403820466085438260532078126518195549771986252677929871971069350126010168872556301769401538273100167581309470241064559591540046250697280422023839907314367021570351907528865821217382408249845415366037174707949

e = 65537

c = 202965658123729301695290823588005720680664417383271993570464094584890156176108923486110171972972401993113712822375619016514191441705557143301731949025997401120652546526334614651700016909257418389562926225046685258219156739609850845736987332118823900545391294861832234610386403331298302317366368346605088228069795089494937055846995868026763654573160917953950219591680588269621708080375680780622173346321372110714193312428798405513095371123064765822911565668751796906670123755481337516315497209404923447908266048920718971446657572773797994824745300369090756972491298883731535351041843493328332121172626485278531188064327174024580996047299403489737947793582635512754294875130563654073805276975301166999928500988213734889107309101743396695392326585224102418089278220663084936941723320602981332095079433983160843105352642856944067290949622842028688640092196424806483741754010182163535577066285500692095904007376189028631599131998117956682152954904738302696106875498821802348285350766676272217956731370990824312151723725994330797852456849294398594048551068472030487686422669190551340406651929845542303823281151104196845826324513363030355866270418198112439142751608756191955103910670125155154217957588507823217402729485000911690196720106

tp = 954221

tq = 875057

  

ab = int(gmpy2.iroot(int(gmpy2.iroot(n,2)[0])-tp//2+2*tq+1,2)[0])

A = 1

B = -n+ab**4+tp*tq

C = ab**4*tp*tq

delta = int(gmpy2.iroot(B**2-4*A*C,2)[0])

ra = (-delta - B)//2

p = (ra//tq)+tp

q = n//p

d = inverse(e,(p-1)*(q-1))

m = pow(c,d,n)

print(long_to_bytes(pow(c,d,n)))

在写解题脚本中,符号的问题给了我很大的困扰,一开始我得到的答案都是这样的:![Evaluate3.png](https://file.pop.atomgit.com/atomgit/information/2025/04/25/c07701a681654fe5b031fe3819e0b075.png)
当时我还以为是什么编码,但是尝试后没用,应该是出错了,最后在调整了很多次符号后,发现是ra = (-delta - B)//2这句的符号有问题,一开始我写的是ra = (delta - B)//2,因为delta在式子中是+或-,所以替换成-后成功了,最后得到flag![Evaluateflag.png](https://file.pop.atomgit.com/atomgit/information/2025/04/25/6b2e6691a1654ece840b6be54084919b.png)

 - asr(2023领航杯)
	题目给定脚本:
	

	``` 
	python
	from Crypto.Util.number import *
	
	from secret import flag
	
	  
	
	def genprime():
	
	    while True:
	
	        r = getRandomNBitInteger(64)
	
	        p = r**6 + 8*r**4 - 41*r**3 + 14*r**2 - 116*r + 31387
	
	        q = r**5 - 9*r**4 + 17*r**3 - 311*r**2 - 16*r + 14029
	
	        if isPrime(p) and isPrime(q):
	
	            return p, q
	
	  
	
	def enc(flag, n):
	
	    m = bytes_to_long(flag)
	
	    return pow(m, 31387, n)
	
	  
	
	p, q = genprime()
	
	n = p * q
	
	c = enc(flag, n)
	
	print(n)
	
	print(c)
	
	n=73553176031506251642448229714220151174734540964434813056145000616720019024269982417494553771890010861489245572362590935764438928110836109730139595790550323300572059713433794357690270439325805603980903813396260703
	
	c=6035303231100318215656164353047198868742763055193754611914191674005776329646395050293747516587004104241717689072827492745628156828285466831779549229513115371571798719567117034735830671759951028004405762435531685
	```

	
因为这个指数爆炸的,所以开方下来的r是可能小于或大于正常的r(但在r的附近),我们尝试爆破一下,满足if的三个条件就成立,然后恢复p,在常规RSA解
![asr1.png](https://file.pop.atomgit.com/atomgit/information/2025/04/25/63abc9bd793e4ee49a0bcc87f1246568.png)
	解出p后,就很好解了,以下是解题脚本:
	
	```python
	n=73553176031506251642448229714220151174734540964434813056145000616720019024269982417494553771890010861489245572362590935764438928110836109730139595790550323300572059713433794357690270439325805603980903813396260703
	
	c=6035303231100318215656164353047198868742763055193754611914191674005776329646395050293747516587004104241717689072827492745628156828285466831779549229513115371571798719567117034735830671759951028004405762435531685
	
	from gmpy2 import *
	
	from Crypto.Util.number import *
	
	r = gmpy2.iroot(n,11)[0]
	
	for i in range(100000):
	
	    p = r**6 + 8*r**4 - 41*r**3 + 14*r**2 - 116*r + 31387
	
	    q = r**5 - 9*r**4 + 17*r**3 - 311*r**2 - 16*r + 14029
	
	    r=r+1
	
	    if isPrime(p) and isPrime(q) and n==p*q:
	
	        print(p)
	
	        break
	
	#p = 36610088622356068137383969963658126276773383894090903529990995656124701988715522981081991290515245553076636123915483
	
	p = 36610088622356068137383969963658126276773383894090903529990995656124701988715522981081991290515245553076636123915483
	
	q = n//p
	
	phi = (p-1)*(q-1)
	
	d = inverse(31387,phi)
	
	m = pow(c,d,n)
	
	print(long_to_bytes(m))
	```
最后得到flag:
![asr2.png](https://file.pop.atomgit.com/atomgit/information/2025/04/25/541fc0cfa4064670a563e694b9592b52.png)

 - easyrsa(2023领航杯)
	题目给定脚本:
	
	```
	python
	from Crypto.Util.number import *
	
	from gmpy2 import invert
	
	#from secret import flag,e
	
	e=11299
	
	flag="CnHongKe{xxxxx}"
	
	  
	
	def enc(key, p):  # 定义加密函数,参数为加密密钥 key 和明文字符串 p
	
	    e, n = key  # 将加密密钥 key 解包为公钥指数 e 和模数 n
	
	    cipher = [pow(ord(char), e, n) for char in p]  # 遍历明文字符串 p 中的每个字符 char
	
	    # 使用 ord(char) 将字符转换为 ASCII 码值,然后进行加密:(ASCII 码值)^e % n
	
	    # 将加密结果存储在列表 cipher 中
	
	    return cipher  # 返回加密后的密文列表
	
	  
	
	def dec(pk, c):  # 定义解密函数,参数为解密密钥 pk 和密文列表 c
	
	    key, n = pk  # 将解密密钥 pk 解包为私钥指数 key 和模数 n
	
	    plain = [chr(pow(char, key, n)) for char in c]  # 遍历密文列表 c 中的每个密文整数 char
	
	    # 对每个密文整数进行解密:char^key % n,得到解密后的 ASCII 码值
	
	    # 使用 chr() 将 ASCII 码值转换回字符,并将结果存储在列表 plain 中
	
	    return ''.join(plain)  # 将解密后的字符列表拼接成一个完整的明文字符串并返回
	
	  
	
	p = getPrime(512)
	
	q = getPrime(512)
	
	n = p*q
	
	  
	
	pubkey = (e,n)
	
	  
	
	assert(e < 20000)
	
	print("Public key:")
	
	print(pubkey[1])
	
	  
	
	cipher = (enc(pubkey, flag))
	
	  
	
	print("Encrypted flag:")
	
	print(cipher)
	
	  
	  
	
	n = 72247494519029483967034760366376786853061601103300157813759661775953565912596351092287547406601293830981872918918938736057259213906558022493243888210973589378711150746378675386713286364059548872717761789465830532496818860955952848759604076974545518597370294034234115061042965941759696027120414108241913315823
	
	c = [23086568633766027889700149282556028601873588133389538577048220777519629053893020835596785887647597774272630671514043075789089166339490664485821551265008072526985961605709337174865785620861795518368806256695564549352791382917399957127324333828822855864895189216581775972150143373812919138450624070271563605781, 61424780590998716668669522879005833894226611068988736111090847848564952203683192799647992306556603909310758923465682857752771528865725336620979965796403804180726836508128298963907214867637490978049881021200499605597084724400813056262536028860369819412653602159130062278358850923752212354694875260742761085298, 48972347185727309580275811398968322398732292284718613286033964656750569533816676490768122129969818200823106363038086076716848785261859085349544695714346759435389253954398744742706972731080540025437559712419376172012608552755595256980994587437212314607911439680754158685958213442852345610886117149808132016667, 61900034054386621130587335874165191153789670659043111868368913383427388843553828977951515166753531254554889530123861241679942156133394477844988559568261609121966239636746106844585498882352452796587012169345091313195906669668187972481122815780919799898784783071380231308771760678158462462371463688337980966056, 61424780590998716668669522879005833894226611068988736111090847848564952203683192799647992306556603909310758923465682857752771528865725336620979965796403804180726836508128298963907214867637490978049881021200499605597084724400813056262536028860369819412653602159130062278358850923752212354694875260742761085298, 9450415868171579852265098054119152648200942770623210086786809222084784959844945630371248180007508011953947300816820109987312423346559505226253550792399518771112488858163511513111841198409634670818742944088825363946933893952656072580401498319136121912520261916028145167846733858193149171599064970439268199783, 10035734578627344969947375235594072983851319696847209997368331158831147669149961069031833471519627366504594153020437204571060611428623914456969214997923532068856482468179965518854707629794312716955250557912419773434419097161023559262564458848063915219346903480654597328232422644596377103117825829328614075690, 5651041338136387965270707005514495599960051787842260459297309665876049923224924292148523058126335232362070965833156272480917510429785778533039914573874120321092901286353688478193761623313802721160582545556066963078690764669931722358118104123077318311422846797054759255064946480668759913078778113387444436772, 14271259146328702790695772784067429851163342737347538777950741762508946650827944617931146968866218980425939274541815935964077603794848153188731356254177631333208035026728310408767228380734867744475231330055609453484352384922899766458129175972076865172633564831188088602907146780176603278159798710852150155253, 62406194652765011605245085350409728452067228284594736543030951188813141827047471129688563874017873401654027493958313799538667190622125421268982329762449606129199279688989354341511243792985075002044026442461088633434402762089223231979549393979184803396697173744411798858018768084174805247172995100258785744206, 63709385155465577684045832627013714734477675077145869296144855691101040965871249828804609100346204070983371062590273336734564969020068052618256509773408613924173909751351554561064586129837540954337160904415625404892669592986127801019807989827319368290273765648256480872195493742292667971088647173453059033806, 48977318868316177241868377840886234518379318740788414464335149639789241373564334219732049732484152649864293157598629604567238775720288389168177046142209467079549232009426147052416900999957014084019576693027561825654624690272350264451017869825303585254430358271190141844081570800201723992346171314406386674943, 48977318868316177241868377840886234518379318740788414464335149639789241373564334219732049732484152649864293157598629604567238775720288389168177046142209467079549232009426147052416900999957014084019576693027561825654624690272350264451017869825303585254430358271190141844081570800201723992346171314406386674943, 565104133813638796527070700551449559996005178784226045,
	
	9297309665876049923224924292148523058126335232362070965833156272480917510429785778533039914573874120321092901286353688478193761623313802721160582545556066963078690764669931722358118104123077318311422846797054759255064946480668759913078778113387444436772, 3956140276099962408524811644378665260926195324627931125735919417604617330787900581903522720016806707086965650313838135840992580442876605474811383818108244966337270671303251812771008272858935652243561913687651063565007930291142413707811828393424201379693530423289355865533076364121921469892110296393354892615, 64940238786056387401400208343541494710106569145648776253264921960848871998112873944735053044143142466740886274718484463159497520574083206269832189589919893550520334911490391957266450195041949757369417242568602992393025242097901450113737739057611554182495438506865992404354942119595468005771945393932589768474, 64940238786056387401400208343541494710106569145648776253264921960848871998112873944735053044143142466740886274718484463159497520574083206269832189589919893550520334911490391957266450195041949757369417242568602992393025242097901450113737739057611554182495438506865992404354942119595468005771945393932589768474, 26352444581944643830963227423429946980811236174292159142870560906116668786800921081108266494217634934060542948019867625299869944900083383044563948756655507024025376518773098977036898176798319228360435941463124583821154981070698271384027340432620539761424919238056654209894138660851835259359180413998571510866, 40143952866342512113851528831224840428508359508863486720333430314639020044892359484055175960350878532212164045297142804890441825145732613460997839927190176844605217276182528040788352071676527553305037569493706223713078036314819975031692707790811142576347096406283580538840499698900522007082050790381461432333, 3956140276099962408524811644378665260926195324627931125735919417604617330787900581903522720016806707086965650313838135840992580442876605474811383818108244966337270671303251812771008272858935652243561913687651063565007930291142413707811828393424201379693530423289355865533076364121921469892110296393354892615, 64940238786056387401400208343541494710106569145648776253264921960848871998112873944735053044143142466740886274718484463159497520574083206269832189589919893550520334911490391957266450195041949757369417242568602992393025242097901450113737739057611554182495438506865992404354942119595468005771945393932589768474, 63709385155465577684045832627013714734477675077145869296144855691101040965871249828804609100346204070983371062590273336734564969020068052618256509773408613924173909751351554561064586129837540954337160904415625404892669592986127801019807989827319368290273765648256480872195493742292667971088647173453059033806, 48888685774691755361314428123012470903274435407919121739086146641066936108772671897622273617773466901370666579985825990735116909193505734002962914749300893402294987407241465624548368394059300582991374404299605248595530416820237532082552535859877438232561386581747696852665114096889765422722443550622873560905, 48888685774691755361314428123012470903274435407919121739086146641066936108772671897622273617773466901370666579985825990735116909193505734002962914749300893402294987407241465624548368394059300582991374404299605248595530416820237532082552535859877438232561386581747696852665114096889765422722443550622873560905, 38583572018907364214647900005166742548285199585572254326541125387795789224923544225334386246655335740938100752554849888600258201438026409196139322439518308323982209353504064739859448757230608480631399883893401220790226127149746215151900805996489931009866529965548635227695192170717058032494324346363053930619, 64940238786056387401400208343541494710106569145648776253264921960848871998112873944735053044143142466740886274718484463159497520574083206269832189589919893550520334911490391957266450195041949757369417242568602992393025242097901450113737739057611554182495438506865992404354942119595468005771945393932589768474, 39561402760999624085248116443786652609261953246279311257359194176046173307879005819035227200168067070869656503,
	
	13838135840992580442876605474811383818108244966337270671303251812771008272858935652243561913687651063565007930291142413707811828393424201379693530423289355865533076364121921469892110296393354892615, 64940238786056387401400208343541494710106569145648776253264921960848871998112873944735053044143142466740886274718484463159497520574083206269832189589919893550520334911490391957266450195041949757369417242568602992393025242097901450113737739057611554182495438506865992404354942119595468005771945393932589768474, 48977318868316177241868377840886234518379318740788414464335149639789241373564334219732049732484152649864293157598629604567238775720288389168177046142209467079549232009426147052416900999957014084019576693027561825654624690272350264451017869825303585254430358271190141844081570800201723992346171314406386674943, 5651041338136387965270707005514495599960051787842260459297309665876049923224924292148523058126335232362070965833156272480917510429785778533039914573874120321092901286353688478193761623313802721160582545556066963078690764669931722358118104123077318311422846797054759255064946480668759913078778113387444436772, 48977318868316177241868377840886234518379318740788414464335149639789241373564334219732049732484152649864293157598629604567238775720288389168177046142209467079549232009426147052416900999957014084019576693027561825654624690272350264451017869825303585254430358271190141844081570800201723992346171314406386674943, 63709385155465577684045832627013714734477675077145869296144855691101040965871249828804609100346204070983371062590273336734564969020068052618256509773408613924173909751351554561064586129837540954337160904415625404892669592986127801019807989827319368290273765648256480872195493742292667971088647173453059033806, 21643731734484252696109953515687478013118937715056061520976924340371395968660338303624558633862679263768843575243426341986847599097591917653435606042602095144570247241757302533523905744626606836773661026140082883368820615972739914083417816255913686820936373857254933361629603081613492930030281179652207492149, 48888685774691755361314428123012470903274435407919121739086146641066936108772671897622273617773466901370666579985825990735116909193505734002962914749300893402294987407241465624548368394059300582991374404299605248595530416820237532082552535859877438232561386581747696852665114096889765422722443550622873560905, 64940238786056387401400208343541494710106569145648776253264921960848871998112873944735053044143142466740886274718484463159497520574083206269832189589919893550520334911490391957266450195041949757369417242568602992393025242097901450113737739057611554182495438506865992404354942119595468005771945393932589768474, 40143952866342512113851528831224840428508359508863486720333430314639020044892359484055175960350878532212164045297142804890441825145732613460997839927190176844605217276182528040788352071676527553305037569493706223713078036314819975031692707790811142576347096406283580538840499698900522007082050790381461432333, 40143952866342512113851528831224840428508359508863486720333430314639020044892359484055175960350878532212164045297142804890441825145732613460997839927190176844605217276182528040788352071676527553305037569493706223713078036314819975031692707790811142576347096406283580538840499698900522007082050790381461432333, 63709385155465577684045832627013714734477675077145869296144855691101040965871249828804609100346204070983371062590273336734564969020068052618256509773408613924173909751351554561064586129837540954337160904415625404892669592986127801019807989827319368290273765648256480872195493742292667971088647173453059033806, 63709385155465577684045832627013714734477675077145869296144855691101040965871249828804609100346204070983371062590273336734564969020068052618256509773408613924173909751351554561064586129837540954337160904415625404892669592986127801019807989827319368290273765648256480872195493742292667971088647173453059033806, 395614027609996240852481164437866526092619532462793112573591941760461733078790058190352272001680670708696565031383813584099258044287660547481138381810824496633727067,
	
	1303251812771008272858935652243561913687651063565007930291142413707811828393424201379693530423289355865533076364121921469892110296393354892615, 48977318868316177241868377840886234518379318740788414464335149639789241373564334219732049732484152649864293157598629604567238775720288389168177046142209467079549232009426147052416900999957014084019576693027561825654624690272350264451017869825303585254430358271190141844081570800201723992346171314406386674943, 20593313344992264722474643208232460904729585942331327945281307002575544045487870568637031063784433406096326172788745559326479291854636106027597680333110098010128235038952685620360851399518780967171732233524825381055879695801401425059095441692301391956163400460584139637380367489591078077440142620116997434358]
	
	```

这题的enc函数中,将flag的每个字节分别进行加密,这导致明文空间只有256,简单枚举即可算出m。wp说e是未知的,但是题目明明给了,这里还是说一下如果是未知的,需要这样求解:
	```python
	for i in range(20000): 
		if pow(ord('C') , i , n) == c[0]: 
			e = i 
			print(e) 
			break 
	e=11299
	```
	然后就是求解m:
	
	```python
	m=''
	
	for c1 in c:  # 遍历密文列表 c 中的每个密文值 c1
	
	    for i in range(127):  # 遍历所有可能的 ASCII 码值(0 到 126)
	
	        if pow(i, 11299, n) == c1:  # 检查 i 的 11299 次方模 n 是否等于密文 c1
	
	            m += chr(i)  # 如果相等,将 i 转换为字符并追加到明文字符串 m 中
	
	print(m)  # 输出解密后的明文字符串
	```
	
得到flag:![easyrsa1.png](https://file.pop.atomgit.com/atomgit/information/2025/04/25/a24b9be87e49489aa08c69e05fa1079d.png)

## 哈希函数介绍
 -  哈希函数又叫散列算法、散列函数,是一种从任何一种数据中创建小的数字指纹的方法,哈希函数把消息压缩成摘要,使得数据量变小。
 - 现在我们经常使用哈希函数来记录用户的密码、判断文件是否受损等。
 - 常见的哈希函数有MD2、MD4、MD5、SHA1、SHA256等。
 - 一个良好的哈希函数应该具备以下特点。
	 - 输入长度可以变。可以应用于任意长度的数据。
	 - 输出长度固定。哈希函数的输出长度应该固定。
	 - 效率要高。对于消息m,要能够快速计算出H(m)。
	 - 单向性。对于哈希值h,很难找到m使得H(m)=h。
	 - 抗弱碰撞性。对于任何消息x,找到另一消息y,且满足H(x)=H(y)是很难的。
	 - 抗强碰撞性。找到任意一对满足H(x)=H(y)的消息是很难的。
	 - 伪随机性。哈希函数的输出应满足伪随机性测试标准。

## 哈希长度扩展攻击
- 哈希函数以固定的块大小运行
- 输入数据被分割成适合块大小的部分
- 如果输入数据(或其一部分)小于块大小,则会填充缺少的字节
- **哈希值表示哈希函数的内部状态!**
	这意味着即使原始输入仍然未知,也可以选择在知道哈希值的情况下继续进行哈希计算。 唯一要做的就是将哈希函数的内部状态重置为哈希值之一。
	
	这只是事实的一半,因为如果我们不知道输入数据,就不知道需要多少填充来完成哈希操作。
	
	哈希函数执行了以下操作(在例如调用Java engineDigest()之后):  
	继续直到到达最后一个块
- 垫最后一块
- 输出摘要
- 重置内部状态
	真正散列的是这样的东西
	h(m)=数据+填充
	如果我们想继续散列,我们必须猜测数据的长度,以确定确切的填充。 一旦我们猜出了正确的长度,就可以将哈希扩展到以下内容
	h(m)=(数据+填充)+ ourExtension + newPaddin
	幸运的是,填充格式必须是确定性的(以便通过传递相同的输入数据来重新创建哈希值),因此知道数据的长度就可以重新填充。 完成这些步骤后,在输出摘要时,我们便具有哈希函数的完整内部状态。
请前往 登录/注册 即可发表您的看法…