20221011

1|0AES KEY – ENCODED IN THE MACHINE READABLE ZONE OF A EUROPEAN EPASSPORT

  1. AES加密模式为CBC,初始化矢量即IV为零,填充为01-00。

  2. 此外,相应的密钥在身份证件上的机器可读区域(MRZ)中,但缺一位,需要使用对应方法复原

    12345678 <8 <<< 1110182 <111116?<<<<<<<<<<<<<<< 4

  3. cipher="9MgYwmuPrjiecPMx61O6zIuy3MtIXQQ0E59T3xB6u0Gyf1gYs2i3K9Jxaa0zj4gTMazJuApwd6+jdyeI5iGHvhQyDHGVlAuYTgJrbFDrfB22Fpil2NfNnWFBTXyf7SDI"

  4. Kenc取自护照上的数字加密的结果

     

  5. Kenc与明文解密

 

1|1护照上的缺失位

 https://www.cnblogs.com/catzhou/p/12711979.html

10:1-9的验证码,验证算法如下

       int Compute(string source)
      {
           string "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
           int[] new int[] { 7, 3, 1 };
           int 0;
           for (int 0; source.Length; i++)
          {
               if (source[i] == '<')
                   continue;
               += s.IndexOf(source[i]) w[3];
          }
           %= 10;
           return c;

      }

12345678 <8 <<< 1110182 <111116?<<<<<<<<<<<<<<< 4

校验位的计算方法为不断重复7 3 1并且进行加权 模10 计算

= [1,1,1,1,1,6]
= [7,3,1,7,3,1]
for in range(0,6):
   a[i]*b[i]
   res 10
print (res)
#res = 7

得到缺失的校验位为 7

1|2Kenc

import hashlib
passport '12345678<8<<<1110182<1111167<<<<<<<<<<<<<<<4'
num passport[:10]
birth passport[13:20]
arrive passport[21:28]
mrz num+birth+arrive
hashlib.sha1(mrz.encode()).hexdigest()
print(h)

链接Kseed与c得到D

"a095f0fdfe51e6ab3bf5c777302c473e7a59be65"
k_seed h[:32]
'00000001'
k_seed c
h_D hashlib.sha1(bytes.fromhex(D)).hexdigest()
print(h_D)

D=eb8645d97ff725a998952aa381c5307909962536

取D的前16位和后16位并进行奇偶校验,得到key值

def jiaoyan(x):
   = []
   bin(int(x, 16))[2:]
   for in range(0, len(a), 8):
       if (a[i:7].count("1")) == 0:
           k.append(a[i:7])
           k.append('1')
       else:
           k.append(a[i:7])
           k.append('0')
   a1 hex(int(''.join(k), 2))
   return a1[2:]
"a095f0fdfe51e6ab3bf5c777302c473e7a59be65"
k_seed h[:32]
'00000001'
k_seed c
h_D hashlib.sha1(bytes.fromhex(D)).hexdigest()
ka h_D[:16]
kb h_D[16:32]

k_1 jiaoyan(ka)
k_2 jiaoyan(kb)
key k_1 k_2
print(key)
# ea8645d97ff725a898942aa280c43179

最后使用key对明文进行解密

cipher="9MgYwmuPrjiecPMx61O6zIuy3MtIXQQ0E59T3xB6u0Gyf1gYs2i3K9Jxaa0zj4gTMazJuApwd6+jdyeI5iGHvhQyDHGVlAuYTgJrbFDrfB22Fpil2NfNnWFBTXyf7SDI"
m=AES.new(binascii.unhexlify(key),AES.MODE_CBC,binascii.unhexlify(IV))
print(m.decrypt(cipher))
#b'Herzlichen Glueckwunsch. Sie haben die Nuss geknackt. Das Codewort lautet: Kryptographie!\x01\x00\x00\x00\x00\x00\x00'

 

最终结果为 Kryptographie

 

1|3Reference

https://www.cnblogs.com/J4m-OvO/p/16760256.html

https://blog.csdn.net/Koz_0/article/details/109540921


__EOF__

本文作者noobwei
本文链接https://www.cnblogs.com/noobwei/p/16823809.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   noobwei  阅读(199)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示