찾다
백엔드 개발파이썬 튜토리얼Python(코드)에서 DES 암호화 및 복호화를 구현하는 방법 소개

Python(코드)에서 DES 암호화 및 복호화를 구현하는 방법 소개

Mar 25, 2019 am 10:49 AM
python암호화 알고리즘암호화

이 글은 Python에서 DES 암호화 및 복호화를 구현하는 방법(코드)을 소개합니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

DES(데이터 암호화 표준)는 64비트 블록 길이와 56비트 키 길이를 사용합니다. 64비트 입력을 사용하고 일련의 변환을 거쳐 64비트 출력을 얻습니다. 복호화에는 동일한 단계와 동일한 키가 사용됩니다. 유일한 차이점은 암호화 프로세스에서 키 순서가 반대라는 것입니다.

DES 암호화:

이 알고리즘의 입력은 암호화해야 하는 일반 텍스트와 암호화에 사용되는 키이며 둘 다 길이는 64비트입니다. 키의 8번째, 16번째, 24번째, 32번째, 40번째, 48번째, 56번째 및 64번째 비트는 패리티 비트입니다.

1. 일반 텍스트 처리

일반 텍스트를 프로그램으로 읽어서 바이너리 문자열로 변환

def inputText(filename):
    with open(filename,'r')as f:
        text = f.read()
    text = text.split('\n')
    text = [eval(x) for x in text]
    text = ['{:08b}'.format(x) for x in text]
    text = ''.join(text)
    
    return text

IP 교체 수행 일반 텍스트로 나누고 왼쪽 및 오른쪽 하위 문자열의 경우

def IP_Transposition(plaintext):
    LR = []
    for i in IP:
        LR.append(int(plaintext[i-1]))
    L = LR[:32]
    R = LR[32:]
    return L,R

2. 키 처리

키를 프로그램에 읽어서 이진 문자열 형식으로 저장합니다.

키에 대해 PC-1 순열을 수행하고 두 개의 하위 문자열로 나눕니다

#密钥置换
def Key_Transposition(key):
    CD = []
    for i in PC_1:
        CD.append(int(key[i-1]))
    C = CD[:28]
    D = CD[28:]
    return C,D

반복에 필요한 키를 생성하기 전에 키를 순열하고 압축해야 합니다

#密钥压缩
def Key_Compress(C,D):
    key = C+D
    new_key = []
    for i in PC_2:
        new_key.append(key[i-1])
    return new_key

Generate DES 반복의 각 라운드에 필요한 하위 키는 암호화 및 암호 해독에 직접 사용됩니다.

def generateKset(key):
    key = inputKey(key)
    C,D = Key_Transposition(key)
    K = []
    for i in LeftRotate:
        C = Key_LeftRotate(C,i)
        C = Key_LeftRotate(D,i)
        K.append(Key_Compress(C,D))
    return K

3, F function

각 변환 라운드에서 전체 프로세스는 다음 공식을 사용하여 사용할 수 있습니다. 의미:

$$ L_i = R_{i-1} $$

$$ R_i = L_{i-1}비고플러스 F(R_{i-1},K_i) $$

라운드 키 Ki는 48비트 길이이고 R은 32비트 길이입니다. 먼저, 이 48비트를 Ki와 XOR하여 결과를 생성합니다. 32비트 출력을 생성하는 대체 함수. 32비트 출력은 P 교체 후 L과 XOR되어 새로운 R

을 얻습니다. 교체 기능은 8개의 S 박스로 구성되며, 각 S 박스에는 6비트 입력과 4비트 출력이 있습니다. 각 S 박스에 대해 입력의 첫 번째와 마지막 비트는 2비트 이진수를 형성하며, 이는 S 박스에 있는 대체 값의 4행 중 하나를 선택하는 데 사용되며 중간 4비트는 선택에 사용됩니다. 16개의 열 중 하나입니다.

#明文R扩展为48位
def R_expand(R):
    new_R = []
    for i in E:
        new_R.append(R[i-1])
    return new_R

#将两列表元素异或
def xor(input1,input2):
    xor_result = []
    for i in range(0,len(input1)):
        xor_result.append(int(input1[i])^int(input2[i]))
    return xor_result

#将异或的结果进行S盒代替
def S_Substitution(xor_result):
    s_result = []
    for i in range(0,8):
        tmp = xor_result[i*6:i*6+5]
        row = tmp[0]*2+tmp[-1]
        col = tmp[1]*8+tmp[2]*4+tmp[3]*2+tmp[4]
        s_result.append('{:04b}'.format(S[i][row][col]))
    s_result = ''.join(s_result)
    return s_result
#F函数
def F(R,K):
    new_R = R_expand(R)
    R_Kxor= xor(new_R,K)
    s_result = S_Substitution(R_Kxor)
    p_result = P_Transposition(s_result)
    return p_result

#将S盒代替的结果进行P置换
def P_Transposition(s_result):
    p_result = []
    for i in P:
        p_result.append(int(s_result[i-1]))
    return p_result

4. 암호화 프로세스

DES 암호화에는 16회 반복이 필요하며 매번 마지막에 L과 R을 교환해야 합니다. 시간은 교환되지 않습니다 #🎜🎜 #

def DES_encrypt(filename,key,outputFile):
    #从文件中读取明文
    plaintext = inputText(filename)
    #将明文进行置换分离
    L,R = IP_Transposition(plaintext)
    #生成Kset
    K = generateKset(key)
    for i in range(0,15):
        oldR = R
        #F函数
        p_result = F(R,K[i])
        R = xor(L,p_result)
        L = oldR
    p_result = F(R,K[15])
    L = xor(L,p_result)
    #IP逆置换
    reversedP = IP_reverseTransp(L+R)
    #生成16进制表示的密文
    Cipher = generateHex(reversedP)
    #将密文写入outputFile文件
    writeFile(outputFile,Cipher)
    return Cipher
DES 암호 해독:

def DES_decrypt(filename,key,outputFile):
    #文件中读取密文
    Ciphertext = inputText(filename)
    #将密文进行置换分离
    L,R = IP_Transposition(Ciphertext)
    #生成Kset
    K = generateKset(key)
    for i in range(15,0,-1):
        oldR = R
        #F函数
        p_result = F(R,K[i])
        R = xor(L,p_result)
        L = oldR
    
    p_result = F(R,K[0])
    L = xor(L,p_result)
    reversedP = IP_reverseTransp(L+R)
    plaintext = generateHex(reversedP)
    writeFile(outputFile,plaintext)
    return plaintext
소스 코드 주소 https://github.com/SuQinghang...

이 기사 더 많은 흥미로운 콘텐츠를 보려면 PHP 중국어 웹사이트의

python 비디오 튜토리얼 열을 주목하세요!

위 내용은 Python(코드)에서 DES 암호화 및 복호화를 구현하는 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 segmentfault에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
파이썬 : 컴파일러 또는 통역사?파이썬 : 컴파일러 또는 통역사?May 13, 2025 am 12:10 AM

Python은 해석 된 언어이지만 편집 프로세스도 포함됩니다. 1) 파이썬 코드는 먼저 바이트 코드로 컴파일됩니다. 2) 바이트 코드는 Python Virtual Machine에 의해 해석되고 실행됩니다. 3)이 하이브리드 메커니즘은 파이썬이 유연하고 효율적이지만 완전히 편집 된 언어만큼 빠르지는 않습니다.

루프 대 루프를위한 파이썬 : 루프시기는 언제 사용해야합니까?루프 대 루프를위한 파이썬 : 루프시기는 언제 사용해야합니까?May 13, 2025 am 12:07 AM

USEAFORLOOPHENTERATINGOVERASERASERASPECIFICNUMBEROFTIMES; USEAWHILLOOPWHENTINUTIMONDITINISMET.FORLOOPSAREIDEALFORKNOWNSEDINGENCENCENS, WHILEWHILELOOPSSUITSITUATIONS WITHERMINGEDERITERATIONS.

파이썬 루프 : 가장 일반적인 오류파이썬 루프 : 가장 일반적인 오류May 13, 2025 am 12:07 AM

Pythonloopscanleadtoerrors likeinfiniteloops, modifyinglistsdizeration, off-by-by-byerrors, zero-indexingissues, andnestedloopineficiencies.toavoidthese : 1) aing'i

파이썬의 루프 및 루프의 경우 : 각각의 장점은 무엇입니까?파이썬의 루프 및 루프의 경우 : 각각의 장점은 무엇입니까?May 13, 2025 am 12:01 AM

ForloopSareadvantageForkNowniTerations 및 Sequence, OffingSimplicityAndInamicConditionSandunkNowniTitionS 및 ControlOver Terminations를 제공합니다

파이썬 : 편집과 해석에 대한 깊은 다이빙파이썬 : 편집과 해석에 대한 깊은 다이빙May 12, 2025 am 12:14 AM

Pythonusesahybridmodelofilationandlostretation : 1) ThePyThoninterPretreCeterCompileSsourcodeIntOplatform-IndependentBecode.

Python은 해석 된 또는 편집 된 언어입니까? 왜 중요한가?Python은 해석 된 또는 편집 된 언어입니까? 왜 중요한가?May 12, 2025 am 12:09 AM

Pythonisbothingretedandcompiled.1) 1) it 'scompiledtobytecodeforportabilityacrossplatforms.2) thebytecodeisthentenningreted, withfordiNamictyTeNgreted, WhithItmayBowerShiledlanguges.

루프 대 파이썬의 루프 : 주요 차이점 설명루프 대 파이썬의 루프 : 주요 차이점 설명May 12, 2025 am 12:08 AM

forloopsareideal when

루프를위한 것 및 기간 : 실용 가이드루프를위한 것 및 기간 : 실용 가이드May 12, 2025 am 12:07 AM

forloopsareusedwhendumberofitessiskNowninadvance, whilewhiloopsareusedwhentheationsdepernationsorarrays.2) whiloopsureatableforscenarioScontiLaspecOndCond

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.