下面函式 v3encode 傳入引數V3 'beb9970fd00da66590ce51c287c6707d' 得到 ff5402272bfebd2c7f81da79e3d68dc0
請問有逆回演算法嗎?就是 傳入 ff5402272bfebd2c7f81da79e3d68dc0 要得到beb9970fd00da66590ce51c287c6707d 這個值
具體怎么寫呢?謝謝
v3 = bytes.fromhex('beb9970fd00da66590ce51c287c6707d')
v3encode(v3)
def v3encode(self,v3):
v3Arr = {}
for i in range(4):
v3Arr[i] = v3[i*4:i*4+4]
print(v3Arr[i].hex())
cbc_tab = bytes.fromhex('C66363A5F87C7C84EE777799F67B7B8DFFF2F20DD66B6BBDDE6F6FB191C5C5546030305002010103CE6767A9562B2B7DE7FEFE19B5D7D7624DABABE6EC76769A8FCACA451F82829D89C9C940FA7D7D87EFFAFA15B25959EB8E4747C9FBF0F00B41ADADECB3D4D4675FA2A2FD45AFAFEA239C9CBF53A4A4F7E47272969BC0C05B75B7B7C2E1FDFD1C3D9393AE4C26266A6C36365A7E3F3F41F5F7F70283CCCC4F6834345C51A5A5F4D1E5E534F9F1F108E2717193ABD8D873623131532A15153F0804040C95C7C752462323659DC3C35E30181828379696A10A05050F2F9A9AB50E070709241212361B80809BDFE2E23DCDEBEB264E2727697FB2B2CDEA75759F1209091B1D83839E582C2C74341A1A2E361B1B2DDC6E6EB2B45A5AEE5BA0A0FBA45252F6763B3B4DB7D6D6617DB3B3CE5229297BDDE3E33E5E2F2F7113848497A65353F5B9D1D16800000000C1EDED2C40202060E3FCFC1F79B1B1C8B65B5BEDD46A6ABE8DCBCB4667BEBED97239394B944A4ADE984C4CD4B05858E885CFCF4ABBD0D06BC5EFEF2A4FAAAAE5EDFBFB16864343C59A4D4DD766333355118585948A4545CFE9F9F91004020206FE7F7F81A05050F0783C3C44259F9FBA4BA8A8E3A25151F35DA3A3FE804040C0058F8F8A3F9292AD219D9DBC70383848F1F5F50463BCBCDF77B6B6C1AFDADA754221216320101030E5FFFF1AFDF3F30EBFD2D26D81CDCD4C180C0C1426131335C3ECEC2FBE5F5FE1359797A2884444CC2E17173993C4C45755A7A7F2FC7E7E827A3D3D47C86464ACBA5D5DE73219192BE6737395C06060A0198181989E4F4FD1A3DCDC7F44222266542A2A7E3B9090AB0B8888838C4646CAC7EEEE296BB8B8D32814143CA7DEDE79BC5E5EE2160B0B1DADDBDB76DBE0E03B64323256743A3A4E140A0A1E924949DB0C06060A4824246CB85C5CE49FC2C25DBDD3D36E43ACACEFC46262A6399191A8319595A4D3E4E437F279798BD5E7E7328BC8C8436E373759DA6D6DB7018D8D8CB1D5D5649C4E4ED249A9A9E0D86C6CB4AC5656FAF3F4F407CFEAEA25CA6565AFF47A7A8E47AEAEE9100808186FBABAD5F07878884A25256F5C2E2E72381C1C2457A6A6F173B4B4C797C6C651CBE8E823A1DDDD7CE874749C3E1F1F21964B4BDD61BDBDDC0D8B8B860F8A8A85E07070907C3E3E4271B5B5C4CC6666AA904848D806030305F7F6F6011C0E0E12C26161A36A35355FAE5757F969B9B9D01786869199C1C1583A1D1D27279E9EB9D9E1E138EBF8F8132B9898B322111133D26969BBA9D9D970078E8E89339494A72D9B9BB63C1E1E2215878792C9E9E92087CECE49AA5555FF50282878A5DFDF7A038C8C8F59A1A1F8098989801A0D0D1765BFBFDAD7E6E631844242C6D06868B8824141C3299999B05A2D2D771E0F0F117BB0B0CBA85454FC6DBBBBD62C16163A51F4A7507E4165531A17A4C33A275E963BAB6BCB1F9D45F1ACFA58AB4BE303932030FA55AD766DF688CC7691F5024C254FE5D7FCC52ACBD726354480B562A38FDEB15A4925BA1B6745EA0E985DFEC0E1C32F7502814CF0128D4697A36BD3F9C6038F5FE715929C95BF6D7AEB955259DAD4BE832D587421D349E069298EC9C84475C2896AF48E797899583E6B27B971DDBEE14FB6F088AD17C920AC667DCE3AB463DF4A18E51A31829751336062537F45B16477E0BB6BAE84FE81A01CF9082B94704868588F45FD1994DE6C87527BF8B7AB73D323724B02E2E31F8F576655AB2AB2EB28072FB5C20386C57B9AD33708A5302887F223BFA5B202036ABAED16825C8ACF1C2BA779B492F307F2F04E69E2A165DAF4CD0605BED5D134621FC4A6FE8A342E539DA2F355A0058AE132A4F6EB750B83EC394060EFAA5E719F06BD6E10513E218AF996DD063DDD3E05AE4DE6BD4691548DB571C45D050406D46F605015FF1998FB24D6BDE997894043CC67D99E77B0E842BD07898B88E7195B3879C8EEDBA17C0A477C420FE9F8841EC90000000009808683322BED481E1170AC6C5A724EFD0EFFFB0F8538563DAED51E362D39270A0FD964685CA6219B5B54D124362E3A0C0A67B19357E70FB4EE96D21B9B919E80C0C54F61DC20A25A774B691C121A16E293BA0AC0A02AE53C22E043121B171D0E090D0BF28BC7AD2DB6A8B9141EA9C857F11985AF75074CEE99DDBBA37F60FDF701269F5C72F5BC44663BC55BFB7E348B432976CB23C6DCB6EDFC68B8E4F163D731DCCA426385101397224084C61120854A247DD2BB3DF8AEF93211C729A16D1D9E2F4BDCB230F30D8652EC77C1E3D02BB3166CA970B999119448FA47E96422A8FC8CC4A0F03F1A567D2CD8223390EF87494EC7D938D1C18CCAA2FE98D40B36A6F581CFA57ADE28DAB78E263FADBFA42C3A9DE45078920D6A5FCC9B547E4662F68D13C290D8B8E82E39F75E82C3AFF59F5D80BE69D0937C6FD52DA9CF2512B3C8AC993B10187DA7E89C636EDB3BBB7BCD2678096E5918F4EC9AB701834F9AA8E6956E65AAFFE67E21BCCF08EF15E8E6BAE79BD94A6F36CEEA9F09D429B07CD631A4B2AF2A3F2331C6A5943035A266C0744EBC37FC82CAA6E090D0B033A7D815F104984A41ECDAF77FCD500E1791F62F764DD68D43EFB04DCCAA4D54E49604DF9ED1B5E34C6A881BC12C1FB84665517F9D5EEA04018C355DFA877473FB0B412EB3671D5A92DBD252E91056336DD647139AD7618C37A10C7A59F8148EEB133C89CEA927EEB761C935E11CE5ED7A47B13C9CD2DF5955F2733F1814CE7973C737BF53F7CDEA5FFDAA5BDF3D6F147844DB86CAAFF381B968C43E3824342CC2A3405F161DC372BCE2250C283C498BFF0D954139A80171080CB3DED8B4E49C6456C1907BCB8461D532B670486C5C74D0B8574201020302')
R6Key = bytes.fromhex('F4D8D82D87ACB95FF3C3CE3A81E3EE1AE7F07A21605CC37E939F0D44127CE35EF3E122E893BDE1960022ECD2125E0F8CA3974621302AA7B730084B65225644E9028C58B232A6FF0502AEB46020F8F0896300FF0551A600005308B46073F044E9AF1BE18AFEBDE18AADB555EADE45110341999A97BF247B1D12912EF7CCD43FF412EC25DCADC85EC1BF597036738D4FC279680053D4A05E926BF92EA418746166')
j = 0
result = bytes()
i = 0
while i < 4:
R4 = v3Arr[2][::-1]
cbcindex = (int(R4.hex(), 16) >> 0xE) & 0x3FC
cbcval = cbc_tab[cbcindex:cbcindex + 4][::-1]
R4 = self.RORS(cbcval.hex(), -0x10)
cbcindex = (int(v3Arr[1][::-1].hex(), 16) >> 0x6) & 0x3FC
cbcval = cbc_tab[cbcindex:cbcindex + 4][::-1]
R2 = self.RORS(cbcval.hex(), -0x18)
cbcindex = v3Arr[i][0] << 2
R3 = cbc_tab[cbcindex:cbcindex + 4][::-1]
R6Keyindex = (j * 16) + (i * 4)
R6 = R6Key[R6Keyindex:R6Keyindex + 4][::-1]
cbcindex = (int(v3Arr[3][::-1].hex(),16) >> 0x16) & 0x3FC
cbcval = cbc_tab[cbcindex:cbcindex + 4][::-1]
R0 = self.RORS(cbcval.hex(), -8)
print('R0 R6 R2,R3,R4',R0, R6.hex(),R2,R3.hex(),R4)
R0 = int(R6.hex(),16) ^ int(R0, 16) ^ int(R2, 16) ^ int(R3.hex(), 16) ^ int(R4, 16)
print('結果:', hex(R0))
result += R0.to_bytes(length=4, byteorder='big', signed=False)[::-1]
i += 1
return result.hex()
def RORS(self,lst, k):
lst = '0x' + lst if lst.find('0x')==-1 else lst
length = len(lst)
t = k % length
lst = lst[length - t:] + lst[:length - t]
lst = lst.replace('0x', '')
return lst
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/29936.html
下一篇:用R語言處理批間差時出現如下錯誤
