返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用Python复现二战德军enigma密码机
  • 104
分享到

怎么用Python复现二战德军enigma密码机

2023-06-26 05:06:39 104人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“怎么用python复现二战德军enigma密码机”,在日常操作中,相信很多人在怎么用Python复现二战德军enigma密码机问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python

这篇文章主要介绍“怎么用python复现二战德军enigma密码机”,在日常操作中,相信很多人在怎么用Python复现二战德军enigma密码机问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python复现二战德军enigma密码机”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

前言

我们知道,enigma机是德军二战中重要的情报加密机器,其有许多特点。

首先,它是一台加解密一体机

其次,它有排己性,虽然多次输入同一明文可能得到不同的密文,但明文a永远不可能加密为其本身。这样完美掩盖本身明文的性质是由反射板造成的,但也最终在图灵的利用下给了enigma机致命一击。

enigma机先后有多种不同的型号,如3转轮型,5转轮型,5转轮选3转轮型等等。

代码

话不多说,直接上代码:(一些使用说明见文末)

# -*- coding: utf-8 -*-"""Created on Tue Jan  4 09:40:42 2022@author: burger"""  from numpy import randomimport numpy as npimport time arr = np.array(['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']) #输入一个批次号num = input('请输入您要使用的enigma机批次号XXX-XXX-XXX(示例:123-456-789)\n')filename = 'enigma_code_book.txt'with open(filename) as file_object:    context = file_object.read()    if num in context:    number = context.find(num)    arr_a=context[(number+12):(number+38)]  #一号转轮    arr_b=context[(number+39):(number+65)]  #二号转轮    arr_c=context[(number+66):(number+92)]  #三号转轮    arr_d=context[(number+93):(number+119)]  #反射板 else:    arr_a=random.permutation(arr)    arr_b=random.permutation(arr)    arr_c=random.permutation(arr)    arr_d=random.permutation(arr)    with open(filename,'a') as file_object:        str_1='\n'        str_1=str_1+num        str_1+=' '        for i in range(len(arr_a)):            str_1+=arr_a[i]        str_1+=' '        for i in range(len(arr_b)):            str_1+=arr_b[i]        str_1+=' '        for i in range(len(arr_c)):            str_1+=arr_c[i]        str_1+=' '        for i in range(len(arr_d)):            str_1+=arr_d[i]        str_1+=' '        file_object.write(str_1)zzwz=input('请输入初始转子位置(规范为三个英文字母中间加两个英文逗号)\n eg: a,b,c\n')#zzwz即转子位置zz_1=list(zzwz)[0]zz_2=list(zzwz)[2]zz_3=list(zzwz)[4]num_zz_1=ord(zz_1)-97num_zz_2=ord(zz_2)-97num_zz_3=ord(zz_3)-97 def main():    global num_zz_1    global num_zz_2    global num_zz_3    text=input('请输入加密内容\n')    for n in range(len(text)):        string=list(text)[n]        print(zhuanhuan(string),end='')        num_zz_1+=1        if num_zz_1 == 26:            num_zz_1 = 0            num_zz_2+=1            if num_zz_2 == 26:                num_zz_2=0                num_zz_3+=1                if num_zz_3 == 26:                    num_zz_3 = 0def zhuanhuan(letter):    #a号转轮    #右侧有26个触点    #生成a轮的随机连线方式     a_1_1=False    a_1_2=False    a_1_3=False    a_1_4=False    a_1_5=False    a_1_6=False    a_1_7=False    a_1_8=False    a_1_9=False    a_1_10=False    a_1_11=False    a_1_12=False    a_1_13=False    a_1_14=False    a_1_15=False    a_1_16=False    a_1_17=False    a_1_18=False    a_1_19=False    a_1_20=False    a_1_21=False    a_1_22=False    a_1_23=False    a_1_24=False    a_1_25=False    a_1_26=False    if letter == 'a':        a_1_1 = True    if letter == 'b':        a_1_2 = True    elif letter == 'c':        a_1_3 = True    elif letter == 'd':        a_1_4 = True    elif letter == 'e':        a_1_5 = True    elif letter == 'f':        a_1_6 = True    elif letter == 'g':        a_1_7 = True    elif letter == 'h':        a_1_8 = True    elif letter == 'i':        a_1_9 = True    elif letter == 'j':        a_1_10 = True    elif letter == 'k':        a_1_11 = True    elif letter == 'l':        a_1_12 = True    elif letter == 'm':        a_1_13 = True    elif letter == 'n':        a_1_14 = True    elif letter == 'o':        a_1_15 = True    elif letter == 'p':        a_1_16 = True    elif letter == 'q':        a_1_17 = True    elif letter == 'r':        a_1_18 = True    elif letter == 's':        a_1_19 = True    elif letter == 't':        a_1_20 = True    elif letter == 'u':        a_1_21 = True    elif letter == 'v':        a_1_22 = True    elif letter == 'w':        a_1_23 = True    elif letter == 'x':        a_1_24 = True    elif letter == 'y':        a_1_25 = True    elif letter == 'z':        a_1_26 = True    a_1_first=[a_1_1,a_1_2,a_1_3,a_1_4,a_1_5,a_1_6,a_1_7,a_1_8,a_1_9,a_1_10,a_1_11,a_1_12,a_1_13,a_1_14,a_1_15,a_1_16,a_1_17,a_1_18,a_1_19,a_1_20,a_1_21,a_1_22,a_1_23,a_1_24,a_1_25,a_1_26]#    print(a_1_first)    a_1=[False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False]    for i in range(26):        global num_zz_1        a_1[i]=a_1_first[(num_zz_1-26)+i]#    print(a_1)    #左侧有26个触点    a_2_1=False    a_2_2=False    a_2_3=False    a_2_4=False    a_2_5=False    a_2_6=False    a_2_7=False    a_2_8=False    a_2_9=False    a_2_10=False    a_2_11=False    a_2_12=False    a_2_13=False    a_2_14=False    a_2_15=False    a_2_16=False    a_2_17=False    a_2_18=False    a_2_19=False    a_2_20=False    a_2_21=False    a_2_22=False    a_2_23=False    a_2_24=False    a_2_25=False    a_2_26=False    a_2=[a_2_1,a_2_2,a_2_3,a_2_4,a_2_5,a_2_6,a_2_7,a_2_8,a_2_9,a_2_10,a_2_11,a_2_12,a_2_13,a_2_14,a_2_15,a_2_16,a_2_17,a_2_18,a_2_19,a_2_20,a_2_21,a_2_22,a_2_23,a_2_24,a_2_25,a_2_26]    #构建a号转轮左右对应关系        for i in range(26):        a_2[i]=a_1[ord(arr_a[i])-97]#    print(a_2)    #此时,a号转轮建模成功                    #b号转轮    #右侧有26个触点    b_1_1=False    b_1_2=False    b_1_3=False    b_1_4=False    b_1_5=False    b_1_6=False    b_1_7=False    b_1_8=False    b_1_9=False    b_1_10=False    b_1_11=False    b_1_12=False    b_1_13=False    b_1_14=False    b_1_15=False    b_1_16=False    b_1_17=False    b_1_18=False    b_1_19=False    b_1_20=False    b_1_21=False    b_1_22=False    b_1_23=False    b_1_24=False    b_1_25=False    b_1_26=False    b_1=[b_1_1,b_1_2,b_1_3,b_1_4,b_1_5,b_1_6,b_1_7,b_1_8,b_1_9,b_1_10,b_1_11,b_1_12,b_1_13,b_1_14,b_1_15,b_1_16,b_1_17,b_1_18,b_1_19,b_1_20,b_1_21,b_1_22,b_1_23,b_1_24,b_1_25,b_1_26]        #a轮传给b轮    for i in range(26):        global num_zz_2        b_1[i]=a_2[((num_zz_2)-26)+i]#    print(b_1)    #左侧有26个触点    b_2_1=False    b_2_2=False    b_2_3=False    b_2_4=False    b_2_5=False    b_2_6=False    b_2_7=False    b_2_8=False    b_2_9=False    b_2_10=False    b_2_11=False    b_2_12=False    b_2_13=False    b_2_14=False    b_2_15=False    b_2_16=False    b_2_17=False    b_2_18=False    b_2_19=False    b_2_20=False    b_2_21=False    b_2_22=False    b_2_23=False    b_2_24=False    b_2_25=False    b_2_26=False    b_2=[b_2_1,b_2_2,b_2_3,b_2_4,b_2_5,b_2_6,b_2_7,b_2_8,b_2_9,b_2_10,b_2_11,b_2_12,b_2_13,b_2_14,b_2_15,b_2_16,b_2_17,b_2_18,b_2_19,b_2_20,b_2_21,b_2_22,b_2_23,b_2_24,b_2_25,b_2_26]    #构建b号转轮左右对应关系        for i in range(26):        b_2[i]=b_1[ord(arr_b[i])-97]#    print(b_2)    #此时,b号转轮建模成功         #c号转轮    #右侧有26个触点    c_1_1=False    c_1_2=False    c_1_3=False    c_1_4=False    c_1_5=False    c_1_6=False    c_1_7=False    c_1_8=False    c_1_9=False    c_1_10=False    c_1_11=False    c_1_12=False    c_1_13=False    c_1_14=False    c_1_15=False    c_1_16=False    c_1_17=False    c_1_18=False    c_1_19=False    c_1_20=False    c_1_21=False    c_1_22=False    c_1_23=False    c_1_24=False    c_1_25=False    c_1_26=False    c_1=[c_1_1,c_1_2,c_1_3,c_1_4,c_1_5,c_1_6,c_1_7,c_1_8,c_1_9,c_1_10,c_1_11,c_1_12,c_1_13,c_1_14,c_1_15,c_1_16,c_1_17,c_1_18,c_1_19,c_1_20,c_1_21,c_1_22,c_1_23,c_1_24,c_1_25,c_1_26]        #b轮传给c轮    for i in range(26):        global num_zz_3        c_1[i]=b_2[((num_zz_3)-26)+i]#    print(c_1)    #左侧有26个触点    c_2_1=False    c_2_2=False    c_2_3=False    c_2_4=False    c_2_5=False    c_2_6=False    c_2_7=False    c_2_8=False    c_2_9=False    c_2_10=False    c_2_11=False    c_2_12=False    c_2_13=False    c_2_14=False    c_2_15=False    c_2_16=False    c_2_17=False    c_2_18=False    c_2_19=False    c_2_20=False    c_2_21=False    c_2_22=False    c_2_23=False    c_2_24=False    c_2_25=False    c_2_26=False    c_2=[c_2_1,c_2_2,c_2_3,c_2_4,c_2_5,c_2_6,c_2_7,c_2_8,c_2_9,c_2_10,c_2_11,c_2_12,c_2_13,c_2_14,c_2_15,c_2_16,c_2_17,c_2_18,c_2_19,c_2_20,c_2_21,c_2_22,c_2_23,c_2_24,c_2_25,c_2_26]    #构建c号转轮左右对应关系        for i in range(26):        c_2[i]=c_1[ord(arr_c[i])-97]#    print(c_2)    #此时,c号转轮建模成功      #c号转轮反射板     for i in range(0,26,2):        c_2[ord(arr_d[i])-97],c_2[ord(arr_d[i+1])-97]=c_2[ord(arr_d[i+1])-97],c_2[ord(arr_d[i])-97]            #反向传播    arr_c_2=[]    arr_b_2=[]    arr_a_2=[]    arr_c_1=[]    arr_b_1=[]    arr_a_1=[]     for i in range(26):        arr_c_2.append(ord(arr_c[i])-97)        arr_b_2.append(ord(arr_b[i])-97)        arr_a_2.append(ord(arr_a[i])-97)    arr_c_0=sorted(arr_c_2)    arr_b_0=sorted(arr_b_2)    arr_a_0=sorted(arr_a_2)    for i in range(26):        arr_c_1.append(arr_c_2.index(arr_c_0[i]))        arr_b_1.append(arr_b_2.index(arr_c_0[i]))        arr_a_1.append(arr_a_2.index(arr_c_0[i]))        #c号转轮反向传播    c_3_1=False    c_3_2=False    c_3_3=False    c_3_4=False    c_3_5=False    c_3_6=False    c_3_7=False    c_3_8=False    c_3_9=False    c_3_10=False    c_3_11=False    c_3_12=False    c_3_13=False    c_3_14=False    c_3_15=False    c_3_16=False    c_3_17=False    c_3_18=False    c_3_19=False    c_3_20=False    c_3_21=False    c_3_22=False    c_3_23=False    c_3_24=False    c_3_25=False    c_3_26=False    c_3=[c_3_1,c_3_2,c_3_3,c_3_4,c_3_5,c_3_6,c_3_7,c_3_8,c_3_9,c_3_10,c_3_11,c_3_12,c_3_13,c_3_14,c_3_15,c_3_16,c_3_17,c_3_18,c_3_19,c_3_20,c_3_21,c_3_22,c_3_23,c_3_24,c_3_25,c_3_26]    for i in range(26):        c_3[i]=c_2[arr_c_1[i]]#    print(c_3)    #c轮传给b轮    b_3_1=False    b_3_2=False    b_3_3=False    b_3_4=False    b_3_5=False    b_3_6=False    b_3_7=False    b_3_8=False    b_3_9=False    b_3_10=False    b_3_11=False    b_3_12=False    b_3_13=False    b_3_14=False    b_3_15=False    b_3_16=False    b_3_17=False    b_3_18=False    b_3_19=False    b_3_20=False    b_3_21=False    b_3_22=False    b_3_23=False    b_3_24=False    b_3_25=False    b_3_26=False    b_3=[b_3_1,b_3_2,b_3_3,b_3_4,b_3_5,b_3_6,b_3_7,b_3_8,b_3_9,b_3_10,b_3_11,b_3_12,b_3_13,b_3_14,b_3_15,b_3_16,b_3_17,b_3_18,b_3_19,b_3_20,b_3_21,b_3_22,b_3_23,b_3_24,b_3_25,b_3_26]    for i in range(26):#        global num_zz_3        b_3[i]=c_3[-(num_zz_3)+i]#左侧有26个触点 #    print(b_3)    #b号转轮反向传播    b_4_1=False    b_4_2=False    b_4_3=False    b_4_4=False    b_4_5=False    b_4_6=False    b_4_7=False    b_4_8=False    b_4_9=False    b_4_10=False    b_4_11=False    b_4_12=False    b_4_13=False    b_4_14=False    b_4_15=False    b_4_16=False    b_4_17=False    b_4_18=False    b_4_19=False    b_4_20=False    b_4_21=False    b_4_22=False    b_4_23=False    b_4_24=False    b_4_25=False    b_4_26=False    b_4=[b_4_1,b_4_2,b_4_3,b_4_4,b_4_5,b_4_6,b_4_7,b_4_8,b_4_9,b_4_10,b_4_11,b_4_12,b_4_13,b_4_14,b_4_15,b_4_16,b_4_17,b_4_18,b_4_19,b_4_20,b_4_21,b_4_22,b_4_23,b_4_24,b_4_25,b_4_26]    for i in range(26):        b_4[i]=b_3[arr_b_1[i]]#    print(b_4)    #b轮传给a轮    a_3_1=False    a_3_2=False    a_3_3=False    a_3_4=False    a_3_5=False    a_3_6=False    a_3_7=False    a_3_8=False    a_3_9=False    a_3_10=False    a_3_11=False    a_3_12=False    a_3_13=False    a_3_14=False    a_3_15=False    a_3_16=False    a_3_17=False    a_3_18=False    a_3_19=False    a_3_20=False    a_3_21=False    a_3_22=False    a_3_23=False    a_3_24=False    a_3_25=False    a_3_26=False    a_3=[a_3_1,a_3_2,a_3_3,a_3_4,a_3_5,a_3_6,a_3_7,a_3_8,a_3_9,a_3_10,a_3_11,a_3_12,a_3_13,a_3_14,a_3_15,a_3_16,a_3_17,a_3_18,a_3_19,a_3_20,a_3_21,a_3_22,a_3_23,a_3_24,a_3_25,a_3_26]    for i in range(26):#        global num_zz_2        a_3[i]=b_4[-(num_zz_2)+i]#左侧有26个触点 #    print(a_3)    #a号转轮反向传播    a_4_1=False    a_4_2=False    a_4_3=False    a_4_4=False    a_4_5=False    a_4_6=False    a_4_7=False    a_4_8=False    a_4_9=False    a_4_10=False    a_4_11=False    a_4_12=False    a_4_13=False    a_4_14=False    a_4_15=False    a_4_16=False    a_4_17=False    a_4_18=False    a_4_19=False    a_4_20=False    a_4_21=False    a_4_22=False    a_4_23=False    a_4_24=False    a_4_25=False    a_4_26=False    a_4=[a_4_1,a_4_2,a_4_3,a_4_4,a_4_5,a_4_6,a_4_7,a_4_8,a_4_9,a_4_10,a_4_11,a_4_12,a_4_13,a_4_14,a_4_15,a_4_16,a_4_17,a_4_18,a_4_19,a_4_20,a_4_21,a_4_22,a_4_23,a_4_24,a_4_25,a_4_26]    for i in range(26):        a_4[i]=a_3[arr_a_1[i]]#    print(a_4)    #a轮传回    z_3_1=False    z_3_2=False    z_3_3=False    z_3_4=False    z_3_5=False    z_3_6=False    z_3_7=False    z_3_8=False    z_3_9=False    z_3_10=False    z_3_11=False    z_3_12=False    z_3_13=False    z_3_14=False    z_3_15=False    z_3_16=False    z_3_17=False    z_3_18=False    z_3_19=False    z_3_20=False    z_3_21=False    z_3_22=False    z_3_23=False    z_3_24=False    z_3_25=False    z_3_26=False    z_3=[z_3_1,z_3_2,z_3_3,z_3_4,z_3_5,z_3_6,z_3_7,z_3_8,z_3_9,z_3_10,z_3_11,z_3_12,z_3_13,z_3_14,z_3_15,z_3_16,z_3_17,z_3_18,z_3_19,z_3_20,z_3_21,z_3_22,z_3_23,z_3_24,z_3_25,z_3_26]    for i in range(26):#        global num_zz_1        z_3[i]=a_4[-(num_zz_1)+i]#    print(z_3)    for i in range(26):        if z_3[i]==True:            return(chr(i+97))            if __name__ == '__main__':    main()

 简单解释一下代码,大体思路是用boolean类型的列表来表示每组26个触头的有电无电情况,在复现过程中用到了后来图灵在破解enigma机的时候用到的一种思想:将两个接线情况完全对称的enigma机并排放置。其中对True传递的处理方法和反射板的模拟方法是本人较为满意的地方。

反射过程中,有一个较有意思的东西。上图:

怎么用Python复现二战德军enigma密码机

 以四个触点为例,在正向传播时,我们以左面触点为基准,读取右面触点的序号为3 4 1 2,在反向传播时,我们以右面触点为基准,读取左面触点序号为2 4 1 3。如何根据3412来构建出2413是一个关键。笔者的一个朋友提供了一个很好的思路。假设3412储存在列表A中,对列表A进行从小到大的排序,储存在列表B中。将列表B中每一个元素在列表A中的下标记录到列表C中,列表C即为我们所求。

之后仿照正向传播,进行反向传播即可。

说一下代码的使用方法吧,在源码同一目录下建立一个名为enigma_code_book.txt文件,用于粗存enigma机型号,三个转轮和一个反射板的接线方式。

点击运行代码,随便输入由3组分别3个阿拉伯数字组成的enigma机批次号,如:123-456-789,点回车。此时程序会自动生成该批次号enigma机的接线方法。如果曾经使用过该批次enigma机,则在enigma_code_book中自动找到所需的接线方式。

再输入初始转轮位置,要求为三个小写英文字母,中间由逗号隔开,如:a,b,c。回车,再输入所需加密的明文内容,回车,即可生成密文。

如果想进行解密,则要求输入同一批次号,同一初始转子位置,输入密文,则可解密出明文。

需要注意的是,这里仿照历史中enigma机,只做了26个小写英文字母的加密,而没有数字,大写英文字母以及标点符号等的加密。因为这些只是在其基础上根据应用需求不同做的一些添砖加瓦的工作。笔者也同时考虑到,如果想加密汉语,可以首先将enigma机扩充进大写字母和阿拉伯数字,再结合base64的值即可。

到此,关于“怎么用Python复现二战德军enigma密码机”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 怎么用Python复现二战德军enigma密码机

本文链接: https://lsjlt.com/news/306972.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 用Python复现二战德军enigma密码机
    目录前言代码总结前言 我们知道,enigma机是德军二战中重要的情报加密机器,其有许多特点。 首先,它是一台加解密一体机 其次,它有排己性,虽然多次输入同一明文可能得到不同的密文,但...
    99+
    2024-04-02
  • 怎么用Python复现二战德军enigma密码机
    这篇文章主要介绍“怎么用Python复现二战德军enigma密码机”,在日常操作中,相信很多人在怎么用Python复现二战德军enigma密码机问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python...
    99+
    2023-06-26
  • 怎么用Python实现小游戏飞机大战
    本篇内容介绍了“怎么用Python实现小游戏飞机大战”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、环境安装本文是写的游戏代码,基于Pyg...
    99+
    2023-06-25
  • 怎么用Python检验用户输入密码的复杂度
    这篇文章主要讲解了“怎么用Python检验用户输入密码的复杂度”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python检验用户输入密码的复杂度”吧!密码强度检测规则:至少包含一个数字...
    99+
    2023-07-05
  • 怎么使用python+selenium实现扫码免密登录
    这篇文章主要介绍“怎么使用python+selenium实现扫码免密登录”,在日常操作中,相信很多人在怎么使用python+selenium实现扫码免密登录问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使...
    99+
    2023-07-02
  • 怎么用python实现输入错误密码用户锁定
    这篇文章主要讲解了“怎么用python实现输入错误密码用户锁定”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用python实现输入错误密码用户锁定”吧!新建一个文件,用以存放白名单用户(...
    99+
    2023-06-01
  • 怎么利用20行Python代码实现加密通信
    这篇文章主要介绍“怎么利用20行Python代码实现加密通信”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么利用20行Python代码实现加密通信”文章能帮助大家解决问题。一、引言网络上充满了窃听...
    99+
    2023-06-29
  • 怎么用Python实现随机生成图片验证码
    本篇内容主要讲解“怎么用Python实现随机生成图片验证码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现随机生成图片验证码”吧!导入模块import random...
    99+
    2023-06-26
  • 怎么在Python中利用Telnet实现自动连接检测密码
    这篇文章给大家介绍怎么在Python中利用Telnet实现自动连接检测密码,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。# encoding=utf-8import telnetlibimport&...
    99+
    2023-06-14
  • 怎么用Python代码实现一个简单的凯撒加密算法
    本篇内容介绍了“怎么用Python代码实现一个简单的凯撒加密算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2024-04-02
  • 手把手教你怎么用Python实现zip文件密码的破解
    Python有一个内置模块zipfile可以干这个事情,测试一波,一个测试文件,设置解压密码为123。 import zipfile # 创建文件句柄 ...
    99+
    2024-04-02
  • 怎么用一行Python代码实现ChatGPT接入微信机器人
    今天小编给大家分享一下怎么用一行Python代码实现ChatGPT接入微信机器人的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2023-07-05
  • python怎么利用winreg生成桌面路径及实现扫描二维码图片返回相关信息
    本文小编为大家详细介绍“python怎么利用winreg生成桌面路径及实现扫描二维码图片返回相关信息”,内容详细,步骤清晰,细节处理妥当,希望这篇“python怎么利用winreg生成桌面路径及实现扫描二维码图片返回相关信息”文章能帮助大家...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作