s ='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'from base64 import b64decode
a = b64decode(s.encode())for i inrange(2,100):sum=0for j inrange(i):
cnt =[0for k inrange(256)]
num =0for k inrange(j,len(a), i):
cnt[a[k]]= cnt[a[k]]+1
num = num +1for k inrange(256):sum=sum+ cnt[k]*(cnt[k]-1)/ num /(num -1)/ i
ifabs(sum-0.065)<0.005:print(i,sum)
keyl =29
freq ={# From https://en.wikipedia.org/wiki/Letter_frequency.'e':0.12702,'t':0.09056,'a':0.08167,'o':0.07507,'i':0.06966,'n':0.06749,'s':0.06327,'h':0.06094,'r':0.05987,'d':0.04253,'l':0.04025,'c':0.02782,'u':0.02758,'m':0.02406,'w':0.02360,'f':0.02228,'g':0.02015,'y':0.01974,'p':0.01929,'b':0.01492,'v':0.00978,'k':0.00772,'j':0.00153,'x':0.00150,'q':0.00095,'z':0.00074,' ':0.25000}
key =[]for i inrange(keyl):
keyc =0min=999for j inrange(256):
cnt =[0for k inrange(256)]
num =0for k inrange(i,len(a), keyl):
cnt[a[k]^ j]= cnt[a[k]^ j]+1
num = num +1sum=0for k inrange(26):sum=sum+ cnt[k +ord('a')]/ num * freq[chr(k +ord('a'))]ifabs(sum-0.065)<min:min=abs(sum-0.065)
keyc = j
key.append(keyc)
t =''for i inrange(len(a)):
t = t +chr(a[i]^ key[i % keyl])print(t)
1-2
import hashlib
import itertools
import datetime
starttime = datetime.datetime.now()
hash1="67ae1a64661ac8b4494666f58c4822408dd0a3e4"
str1="QqWw%58(=0Ii*+nN"
str2=[['Q','q'],['W','w'],['%','5'],['8','('],['=','0'],['I','i'],['*','+'],['n','N']]defsha_encrypt(str):
sha = hashlib.sha1(str)
encrypts = sha.hexdigest()return encrypts
st3="0"*8
str4=""
str3=list(st3)for a inrange(0,2):
str3[0]=str2[0][a]for b inrange(0,2):
str3[1]=str2[1][b]for c inrange(0,2):
str3[2]=str2[2][c]for d inrange(0,2):
str3[3]= str2[3][d]for e inrange(0,2):
str3[4]= str2[4][e]for f inrange(0,2):
str3[5]= str2[5][f]for g inrange(0,2):
str3[6]= str2[6][g]for h inrange(0,2):
str3[7]= str2[7][h]
newS="".join(str3)for i in itertools.permutations(newS,8):
str4 = sha_encrypt("".join(i))if str4==hash1:print("".join(i))
endtime = datetime.datetime.now()print((endtime - starttime).seconds)
exit(0)
第二次大作业
2-1
from oracle import*from Crypto.Util import strxor
import re
C ='9F0B13944841A832B2421B9EAF6D9836813EC9D944A5C8347A7CA69AA34D8DC0DF70E343C4000A2AE35874CE75E64C31'
BLOCK =2
div =len(C)/(BLOCK +1)
C = re.findall('.{'+str(div)+'}', C)
Oracle_Connect()
M =[]
IVALUE =[]for b inrange(BLOCK):print'[*] Detecting Block', b +1
IV = C[b]
Ivalue =[]
iv ='00000000000000000000000000000000'
iv = re.findall('.{2}', iv)[::-1]
padding =1for l inrange(16):print" [+] Detecting IVALUE's last", l +1,'block'for ll inrange(l):
iv[ll]=hex(int(Ivalue[ll],16)^ padding)[2:].zfill(2)for n inrange(256):
iv[l]=hex(n)[2:].zfill(2)
data =''.join(iv[::-1])+ C[b +1]
ctext =[(int(data[i:i +2],16))for i inrange(0,len(data),2)]
rc = Oracle_Send(ctext,2)ifstr(rc)=='1':
Ivalue +=[hex(n ^ padding)[2:].zfill(2)]breakprint' [-]',''.join(iv[::-1])print' [-]',''.join(Ivalue[::-1])
padding +=1
Ivalue =''.join(Ivalue[::-1])
IVALUE +=[Ivalue]
m = re.findall('[0-9a-f]+',str(hex(int(IV,16)^int(''.join(Ivalue),16))))[1].decode('hex')
M +=[m]print'[#] Detecting Block', b +1,'-- Done!'print'[#]','The IValue'+str(b +1),'is:', Ivalue
print'[#]','The M'+str(b +1),'is:', m
print'-'*50
Oracle_Disconnect()print'[!] The Intermediary Value is:',''.join(IVALUE)print'[!] The M is:',''.join(M)
a =[7,3,1]*2
b =[1,1,1,1,1,6]printsum([a[i]* b[i]for i inrange(6)])%10
2-3-2
from Crypto.Cipher import AES
from Crypto.Hash import SHA
import re, string, base64
defOdd_Even(ka):
k =[]for i in ka:ifbin(int(i,16)>>1).count('1')%2==0:
k +=[hex(1+(int(i,16)>>1<<1))[2:].zfill(2)]else:
k +=[hex((int(i,16)>>1<<1))[2:].zfill(2)]return''.join(k)defGetSHA1(D):
h = SHA.new()
h.update(D)return h.hexdigest()[:32]
C ='9MgYwmuPrjiecPMx61O6zIuy3MtIXQQ0E59T3xB6u0Gyf1gYs2i3K9Jxaa0zj4gTMazJuApwd6+jdyeI5iGHvhQyDHGVlAuYTgJrbFDrfB22Fpil2NfNnWFBTXyf7SDI'
C = base64.b64decode(C)
Visa ='12345678<8<<<1110182<1111167<<<<<<<<<<<<<<<4'
VisaNo = Visa[:9]
VVisa = Visa[9]
Nationality = Visa[10:13]
Birthday = Visa[13:19]
VBir = Visa[19]
Sex = Visa[20]
VisaEnd = Visa[21:27]
VVisaEnd = Visa[27]
Others = Visa[28:]
Info = VisaNo + VVisa + Birthday + VBir + VisaEnd + VVisaEnd
print Info
K_seed = GetSHA1(Info)
D =(K_seed +'0'*7+'1').decode('hex')
key = GetSHA1(D)
k1 = Odd_Even(re.findall('.{2}',key[:16]))
k2 = Odd_Even(re.findall('.{2}',key[16:]))
key = k1 + k2
print'The key is:', key
cipher = AES.new(key.decode('hex'), AES.MODE_CBC,('0'*32).decode('hex'))print'The M is:', cipher.decrypt(C)
第三次大作业
3-1
from Crypto.Util.number import inverse
from random import randint
defint2str(a):
s =''for i inrange(8):
s +=chr(a %256)
a >>=8
s = s[::-1]
a >>=352return(a &((1<<32)-1)), s
defcheck(a):
a >>=64
a = a &((1<<352)-1)if a ==0:return1else:return0defgcd(a, b):if b ==0:return a
return gcd(b, a % b)defexgcd(a, b):if b ==0:return1,0
x, y = exgcd(b, a % b)return y, x - a // b * y
defcommon_mod(n, e1, c1, e2, c2):# 共模攻击
x, y = exgcd(e1, e2)returnpow(c1, x, n)*pow(c2, y, n)% n
defcommon_factor(n1, e1, c1, n2, e2, c2):# 公因数攻击
p = gcd(n1, n2)
q1 = n1 // p
q2 = n2 // p
phi1 =(p -1)*(q1 -1)
phi2 =(p -1)*(q2 -1)
d1 = inverse(e1, phi1)
d2 = inverse(e2, phi2)returnpow(c1, d1, n1),pow(c2, d2, n2)defcrt(a, m):
M =1for i in m:
M *= i
res =0for i inrange(len(m)):
res =(res + a[i]* M // m[i]* inverse(M // m[i], m[i]))% M
return res
defbroadcast(a, m, e):
c = crt(a, m)
l, r =1, c
while l +1< r:
md =(l + r)//2if md ** e < c:
l = md
else:
r = md
if l ** e == c:return l
if r ** e == c:return r
return0defp_1(n, e, c, b):# p-1 分解
k =1for i inrange(b):
k *= i +1
p = gcd(pow(2, k, n)-1, n)if p ==1or p == n:return0
q = n // p
if p * q != n:return0
phi =(p -1)*(q -1)
d = inverse(e, phi)returnpow(c, d, n)return0defmain():
n =[]
e =[]
c =[]for i inrange(21):
f =open('./data/Frame'+str(i))
s = f.read()
n.append(int(s[:256],16))
e.append(int(s[256:512],16))
c.append(int(s[512:],16))
m =[0for i inrange(21)]# 共模攻击print("Common mod:")for i inrange(21):for j inrange(i):if n[i]== n[j]:# print(i, j, gcd(e[i], e[j]))
m[i]= common_mod(n[i], e[i], c[i], e[j], c[j])
m[j]= m[i]print(i, j,":", int2str(m[i]))# 公因数攻击print("Common factor:")for i inrange(21):for j inrange(i):if gcd(n[i], n[j])>1and n[i]!= n[j]:
m[i], m[j]= common_factor(n[i], e[i], c[i], n[j], e[j], c[j])print(i,":", int2str(m[i]))print(j,":", int2str(m[j]))# 广播攻击print("Broadcast:")id=[3,8,12,16,20]
temp = broadcast([c[i]for i inid],[n[i]for i inid],5)for i inid:
m[i]= temp
print(int2str(temp))# p-1 分解print("P-1:")for i inrange(1,21):if m[i]>0:continue
temp = p_1(n[i], e[i], c[i],10000)if temp >0:print(i,":", int2str(temp))
main()