자동화된 테스트 중에 Python에서 일반적으로 사용되는 여러 암호화 알고리즘을 사용해 보셨나요?

이 기사는 Huawei Cloud 커뮤니티에서 공유됩니다. " "암호화 알고리즘" | Python에서 일반적으로 사용되는 여러 암호화 알고리즘이 자동화된 테스트 중에 구현됩니다. 사용해 보셨나요? ", 저자 : Chong Wuya.

앞에 쓰다

  • 요즘 자동화 테스트를 하던 중 문제가 발생했습니다. 즉, 인터페이스에서 요청한 비밀번호가 암호화되어 있었습니다.
  • 제품의 요구 사항은 다른 특별한 수단을 사용할 수 없다는 것입니다.암호화 알고리즘을 제공하고 인터페이스 요청 시 매개변수를 전달하기 위해 암호화 알고리즘에 의해 처리된 데이터를 사용해야 합니다.
  • 사실 이렇게 말하는 것이 훨씬 간단합니다. 이미 암호화 알고리즘을 알고 있으므로 매개변수를 전달하기 전에 비밀번호를 암호화하기만 하면 됩니다. (내 생각엔 이 제품이 너무 좋다고 조용히 생각합니다.)
  • 이 문서에서는 주로 후속 테스트를 위한 여러 암호화 알고리즘을 구성합니다.

공공 데이터

  • 후속 예제를 용이하게 하기 위해 시연해야 하는 암호화 알고리즘을 균일하게 캡슐화하는 클래스를 설계합니다.
# -*- 코딩:utf-8 -*-

# 저자 : 종 우야

# 날짜: 2023/12/1

# 파일 이름: test_pass.py

# 기능: 일반적으로 사용되는 암호화 알고리즘 구현

# 연락처 : VX(NoamaNelson)

# 블로그: https://blog.csdn.net/NoamaNelson

hashlib 가져오기

클래스 테스트패스():

def __init__(self):

super(TestPass, self).__init__()

self.name = "관리자"

self.password = "123456"

__name__ == "__main__"인 경우:

test_pass = 테스트패스()
  • 그중 self.name은 사용자 이름 데이터를 시뮬레이션하고 self.password는 비밀번호 데이터를 시뮬레이션합니다.

MD5 직접 암호화

  • MD5는 일반적으로 사용되는 단방향 해시 함수이며 되돌릴 수 없습니다. 즉, 암호화 전 내용은 암호화된 결과를 통해 확인할 수 없습니다.
  • 생성된 결과는 고정 128비트 바이트(일반적으로 32비트 16진수 문자열)입니다.
  • 여기서는 Hashlib가 사용됩니다. 일반적으로 Python이 설치된 후에 사용할 수 있습니다. 디렉터리는 다음과 같습니다.
X:\Python37\Lib\hashlib.py
  • 직접 암호화 구현:
데프 test_md5(자체):

md = hashlib.md5(self.password.encode())

md5_pass = md.hexdigest()

print(f"비밀번호 {self.password}, ​​​​직접 md5 암호화 후: {md5_pass}")
  • 출력은 다음과 같습니다
비밀번호는 123456이며, 직접 md5 암호화 후 e10adc3949ba59abbe56e057f20f883e입니다.

사용자 이름과 비밀번호 조합 MD5 암호화

  • 실제 비즈니스 시나리오가 있는데 특정 비즈니스 시스템을 테스트할 때 단순한 비밀번호 MD5 암호화가 아닙니다.
  • 대신 사용자 이름과 비밀번호 조합을 사용하고 먼저 소문자로 변환한 다음 md5로 암호화하세요.
  • 이 요구사항의 구현 프로세스는 다음과 같습니다.
데프 test_md5_01(자체):

데이터 = (self.name + self.password).lower()

md = hashlib.md5(data.encode())

md5_pass = md.hexdigest()

print(f"비밀번호 {self.password}, ​​​​사용자 이름 {self.name}, 암호화 후 md5 조합은: {md5_pass}")
  • 출력은 다음과 같습니다
비밀번호 123456, 사용자 이름 admin, 암호화 후 md5 조합은 다음과 같습니다: a66abb5684c45962d887564f08346e8d

비밀번호는 MD5+salt를 사용하여 암호화됩니다.

  • 이 시나리오에서는 비밀번호가 먼저 솔트됩니다.
  • 그런 다음 원래 비밀번호 뒤에 솔트를 연결하세요.
  • 구현 프로세스는 다음과 같습니다.
데프 test_md5_02(자체):

s = self.password[:5] # 솔트 설정

md = hashlib.md5((self.password + s).encode())

md5_pass = md.hexdigest()

print(f"비밀번호 {self.password}, ​​​​md5가 솔트된 후: {md5_pass}")
  • 출력은 다음과 같습니다
md5가 솔트된 후 비밀번호는 123456입니다. e363373ddc24b34c5bb9d99abbfd8be5

MD5 솔팅 후에 전체 비밀번호가 솔트에 삽입됩니다.

  • 이 시나리오는 매우 일반적입니다. 즉, 소금을 먼저 설정합니다.
  • 그런 다음 Join 메소드를 사용하여 원래 비밀번호와 솔트를 처리합니다.
  • 구현 프로세스는 다음과 같습니다.
데프 test_md5_03(자체):

s = self.password[:6] # 솔트 설정

md = hashlib.md5((self.password.join(s)).encode())

md5_pass = md.hexdigest()

print(f"비밀번호 {self.password}, ​​​​md5 솔팅을 위한 json 방법은: {md5_pass}")
  • 출력은 다음과 같습니다
비밀번호 123456, json 메소드를 사용하는 md5 솔트: 43ec0d3f863b4f7e635e7169ddc18606

SHA1 암호화

  • 이는 MD5와 비슷하지만 결과는 160비트 바이트(보통 40비트 16진수 문자열)입니다.
  • hashlib에도 있습니다.
  • 사용자 이름과 비밀번호는 SHA1을 사용하여 연결되고 암호화됩니다. 구현은 다음과 같습니다.
def test_sha1(자체):

데이터 = self.name + self.password

sha1 = hashlib.sha1()

sha1.update(data.encode("utf-8"))

sha1_pass = sha1.hexdigest()

print(f"비밀번호 {self.password}, ​​​​사용자 이름 {self.name}, sha1 결합 암호화: {sha1_pass}")
  • 출력은 다음과 같습니다
비밀번호 123456, 사용자 이름 admin, 암호화 후 sha1 조합: cd5ea73cd58f827fa78eef7197b8ee606c99b2e6

SHA256 암호화

  • SHA256은 SHA1보다 안전하지만 속도가 느리고 결과가 더 오래 걸립니다.
  • 사용자 이름과 비밀번호는 SHA256을 사용하여 연결되고 암호화됩니다. 구현은 다음과 같습니다.
데프 test_sha256(자체):

데이터 = self.name + self.password

sha256 = hashlib.sha256()

sha256.update(data.encode("utf-8"))

sha1_pass = sha256.hexdigest()

print(f"비밀번호 {self.password}, ​​​​사용자 이름 {self.name}, sha256 조합 암호화는 {sha1_pass}")
  • 출력은 다음과 같습니다
비밀번호 123456, 사용자 이름 admin, sha256 조합 암호화: ac0e7d037817094e9e0b4441f9bae3209d67b02fa484917065f71b16109a1a78
  • 물론 SHA512도 있는데 이에 대해서는 언급하지 않겠지만 같은 원리가 증명될 수 있다.

HMAC 암호화

  • 사실 자동화 과정에서는 이 정도를 많이 사용하지 않지만, 매우 일반적인 암호화 알고리즘이기도 합니다.
  • HMAC는 암호화 해시 기능과 공유 키를 기반으로 하는 메시지 인증 프로토콜입니다.
  • hmac 라이브러리를 사용해야 하며 디렉토리는 다음과 같습니다.
X:\Python37\Lib\hmac.py
  • 매개변수는 3개가 있는데, 하나는 키, 하나는 암호화할 문자열, 하나는 해시 함수입니다.예는 다음과 같습니다.
def test_hmac(자체):

hm = hmac.new(b'029-11111111', bytes(self.password, 'utf-8'), hashlib.md5)

흠.다이제스트()

hmac_pass = hm.hexdigest()

print(f"비밀번호 {self.password}, ​​​​사용자 이름 {self.name}, hmac 암호화 후: {hmac_pass}")
  • 출력은 다음과 같습니다
비밀번호 123456, 사용자 이름 admin, hmac 암호화: 4e32d965d8965df4c7f6aaaf68791e86

기타 알고리즘

  • 물론 DES, AES, RSA, ECC 등과 같은 여러 가지 알고리즘이 있으므로 여기서는 자세히 다루지 않겠습니다.
  • 나중에 시간이 되면 더 추가하겠습니다.

이 기사의 소스 코드

# -*- 코딩:utf-8 -*-

# 저자 : 종 우야

# 날짜: 2023/12/1

# 파일 이름: test_pass.py

# 기능: 일반적으로 사용되는 암호화 알고리즘 구현

# 연락처 : VX(NoamaNelson)

# 블로그: https://blog.csdn.net/NoamaNelson

hashlib 가져오기

hmac 가져오기

클래스 테스트패스():

def __init__(self):

super(TestPass, self).__init__()

self.name = "관리자"

self.password = "123456"

데프 test_md5(자체):

md = hashlib.md5(self.password.encode())

md5_pass = md.hexdigest()

print(f"비밀번호 {self.password}, ​​​​직접 md5 암호화 후: {md5_pass}")

데프 test_md5_01(자체):

데이터 = (self.name + self.password).lower()

md = hashlib.md5(data.encode())

md5_pass = md.hexdigest()

print(f"비밀번호 {self.password}, ​​​​사용자 이름 {self.name}, 암호화 후 md5 조합은: {md5_pass}")

데프 test_md5_02(자체):

s = self.password[:5] # 솔트 설정

md = hashlib.md5((self.password + s).encode())

md5_pass = md.hexdigest()

print(f"비밀번호 {self.password}, ​​​​md5가 솔트된 후: {md5_pass}")

데프 test_md5_03(자체):

s = self.password[:6] # 솔트 설정

md = hashlib.md5((self.password.join(s)).encode())

md5_pass = md.hexdigest()

print(f"비밀번호 {self.password}, ​​​​md5 솔팅을 위한 json 방법은: {md5_pass}")

def test_sha1(자체):

데이터 = self.name + self.password

sha1 = hashlib.sha1()

sha1.update(data.encode("utf-8"))

sha1_pass = sha1.hexdigest()

print(f"비밀번호 {self.password}, ​​​​사용자 이름 {self.name}, sha1 결합 암호화: {sha1_pass}")

데프 test_sha256(자체):

데이터 = self.name + self.password

sha256 = hashlib.sha256()

sha256.update(data.encode("utf-8"))

sha1_pass = sha256.hexdigest()

print(f"비밀번호 {self.password}, ​​​​사용자 이름 {self.name}, sha256 조합 암호화는 {sha1_pass}")

def test_hmac(자체):

hm = hmac.new(b'029-11111111', bytes(self.password, 'utf-8'), hashlib.md5)

흠.다이제스트()

hmac_pass = hm.hexdigest()

print(f"비밀번호 {self.password}, ​​​​사용자 이름 {self.name}, hmac 암호화 후: {hmac_pass}")

__name__ == "__main__"인 경우:

test_pass = 테스트패스()

# test_pass.test_md5()

# test_pass.test_md5_01()

# test_pass.test_md5_02()

# test_pass.test_md5_03()

# test_pass.test_sha1()

# test_pass.test_sha256()

test_pass.test_hmac()

 

화웨이 클라우드의 신기술에 대해 빨리 알아보고 팔로우하려면 클릭하세요~

IntelliJ IDEA 2023.3 및 JetBrains Family Bucket 연간 주요 버전 업데이트 새로운 개념 "방어 프로그래밍": 안정적인 작업 수행 GitHub.com은 1,200개 이상의 MySQL 호스트를 실행합니다. 8.0으로 원활하게 업그레이드하는 방법은 무엇입니까? Stephen Chow의 Web3 팀은 다음 달에 독립 앱을 출시할 예정입니다. Firefox는 사라질까요? Visual Studio Code 1.85 출시, 부동 창 US CISA는 메모리 보안 취약점을 제거하기 위해 C/C++ 포기를 권장합니다. Yu Chengdong: Huawei는 내년에 파괴적인 제품을 출시하고 업계 역사를 다시 쓸 것입니다. TIOBE 12월: C#이 올해의 프로그래밍 언어가 될 것으로 예상됩니다. A 논문 Lei Jun이 30년 전에 작성함: "컴퓨터 바이러스 판별 전문가 시스템의 원리 및 설계"
{{o.이름}}
{{이름}}

Supongo que te gusta

Origin my.oschina.net/u/4526289/blog/10320511
Recomendado
Clasificación