Python의 Rake-comb 암호화 알고리즘: 유형 및 애플리케이션 시나리오
가역적 암호화 알고리즘(대칭형 암호화)
암호화 알고리즘은 원본 데이터를 암호화된 데이터로 변환하는 방법입니다. 암호화 알고리즘의 다양한 특성에 따라 가역적 암호화 알고리즘과 비가역적 암호화 알고리즘으로 나눌 수 있습니다.
가역 암호화 알고리즘은 대칭 암호화 알고리즘이라고도 하며 암호화 및 복호화 프로세스는 동일한 키를 사용합니다. 이 알고리즘에서는 암호화된 데이터를 복호화 알고리즘을 통해 원본 데이터로 복원할 수 있습니다. 이 알고리즘은 컴퓨터의 하드 드라이브에 저장된 파일이나 네트워크를 통해 전송되는 데이터와 같은 데이터의 기밀성을 보호하는 데 자주 사용됩니다.
솔직하게 말하면 전송 과정에서 데이터가 암호화되어 실제로 비즈니스에 사용될 때는 여전히 일반 텍스트가 사용됩니다.
예를 들어 AES 암호화 알고리즘을 사용하여 파일을 암호화합니다:
from Crypto.Cipher import AES import os # 生成一个16字节的密钥 key = os.urandom(16) # 初始化加密算法 cipher = AES.new(key, AES.MODE_EAX) # 读取要加密的文件 with open('plaintext.txt', 'rb') as f: plaintext = f.read() # 对文件进行加密 ciphertext, tag = cipher.encrypt_and_digest(plaintext) # 将加密后的文件保存到磁盘上 with open('ciphertext.txt', 'wb') as f: f.write(cipher.nonce) f.write(tag) f.write(ciphertext)
또는 DES 알고리즘을 사용합니다:
from Crypto.Cipher import DES # 生成一个8字节的密钥 key = b'secretke' # 初始化加密算法 cipher = DES.new(key, DES.MODE_ECB) # 要加密的字符串 plaintext = b'Hello, World!' # 对字符串进行加密 ciphertext = cipher.encrypt(plaintext) # 将加密后的字符串转换为十六进制格式并输出 print(ciphertext.hex())
네트워크 전송 분야에서는 일반적으로 JWT 토큰 암호화 프로세스에서 대칭 암호화가 사용됩니다.
class MyJwt: def __init__(self): # 密钥 self.secret = "1234" # 加密方法(加入生命周期) def encode_time(self,userinfo,lifetime=300): # 单独声明载荷playload playload = { 'exp':(datetime.datetime.now()+datetime.timedelta(seconds=lifetime)).timestamp(), 'data':userinfo } res = jwt.encode(playload,self.secret,algorithm='HS256') return res # 加密方法 async def encode(self,userinfo): res = jwt.encode(userinfo,self.secret,algorithm='HS256') return res # 解密算法 async def decode(self,jwt_str): res = jwt.decode(jwt_str,self.secret,algorithms=['HS256']) return res
실제로 이 경우 특정 시나리오에 적합한 암호화 알고리즘과 키 길이를 선택하고 키를 보호하기 위한 적절한 보안 조치를 취해야 합니다. 왜냐하면 가역 암호화 알고리즘의 경우 일단 비밀 키가 유출되면 그 결과는 치명적일 수 있기 때문입니다.
되돌릴 수 없는 암호화 알고리즘(해시)
되돌릴 수 없는 암호화(해시 알고리즘이라고도 함)는 일반적으로 비밀번호나 데이터의 보안을 보장하기 위해 비밀번호나 데이터를 암호화하거나 확인하는 데 사용됩니다. 해시 알고리즘은 대칭암호나 비대칭암호에 비해 암호화나 복호화에 키가 필요하지 않아 편리하고 효율적이지만, 암호화된 결과가 생성되면 원본 데이터를 복구할 수 없습니다. 되돌릴 수 없는 암호화 알고리즘 가장 일반적인 응용 시나리오는 사용자의 일반 텍스트 비밀번호를 암호문으로 암호화하는 것입니다.
예를 들어 SHA-256 해시 알고리즘을 사용하여 데이터를 암호화합니다.
import hashlib # 加密数据 message = b'hello world' hash_object = hashlib.sha256(message) encrypted_data = hash_object.hexdigest() print(encrypted_data)
또는 bcrypt 알고리즘을 사용하여 비밀번호를 암호화합니다.
import bcrypt # 加密密码 password = b'mysecretpassword' salt = bcrypt.gensalt() hashed_password = bcrypt.hashpw(password, salt) # 验证密码 password_to_check = b'mysecretpassword' if bcrypt.checkpw(password_to_check, hashed_password): print("Password is valid!") else: print("Invalid password.")
또는 scrypt 알고리즘을 사용하여 비밀번호를 암호화합니다.
import scrypt # 加密密码 password = b'mysecretpassword' salt = b'saltsaltsalt' encrypted_password = scrypt.hash(password, salt, N=16384, r=8, p=1) # 验证密码 password_to_check = b'mysecretpassword' if scrypt.hash(password_to_check, salt, N=16384, r=8, p=1) == encrypted_password: print("Password is valid!") else: print("Invalid password.")
원칙은 비슷합니다. 둘 다 원본 데이터는 해시 알고리즘을 기반으로 고정 길이 암호문에 매핑됩니다. 비가역 암호화(해시 알고리즘)는 단방향 암호화 방식이므로 복호화를 통해 원본 데이터를 복구할 수 없으므로 해시를 무차별적으로 크랙합니다. 알고리즘은 일반적으로 수많은 가능성을 소진하여 원본 데이터와 일치시키려고 합니다.
import hashlib # 加载包含密码列表的文件 with open('passwords.txt', 'r') as f: passwords = f.read().splitlines() # 加载哈希值 hash_value = '5d41402abc4b2a76b9719d911017c592' # 尝试匹配密码 for password in passwords: if hashlib.md5(password.encode()).hexdigest() == hash_value: print(f"Password found: {password}") break else: print("Password not found.")
소위 인터넷의 데이터베이스는 "데이터 기반 해제"였습니다. 실제로 유출된 것은 암호문이었고 해커는 MD5를 사용했습니다. 비밀번호 일치를 시도하는 해시 알고리즘입니다. 비밀번호 일치에 성공하면 일치하는 비밀번호가 출력되고, 그렇지 않으면 비밀번호를 찾을 수 없습니다. 물론, 비밀번호를 저장하기 위해 일반 텍스트를 사용하는 CSDN과 같은 이상한 공연 예술은 일반적인 현상으로 간주될 수 없습니다.
그러나 사실 소위 "완전"이라는 것은 진정한 의미에서 완전하지 않습니다. 인간은 이러한 규칙에 따라 생년월일, 휴대폰 번호 등의 비밀번호를 설정하기 때문입니다. 지인이라면 되돌릴 수 없는 암호화를 통해 쉽게 복구할 수 있습니다. 따라서 해커가 비밀번호를 "시험"하는 것을 방지하기 위해 비밀번호는 먼저 길어야 하며 숫자, 대문자, 소문자 및 기호를 포함하여 비밀번호의 가능성을 최대화해야 합니다. 숫자의 경우 10가지, 소문자의 경우 26가지, 대문자의 경우 26가지, 기호의 경우 34가지 가능성이 있으며 길이가 16자리이고 비트 임의인 경우 가능한 비밀번호는 96의 16제곱인 6이 될 수 있습니다. , 이것이 시도된다면 원숭이의 해가 될 것입니다:
마지막으로, 되돌릴 수 없는 암호화 알고리즘은 소금 값을 늘리고 반복 횟수를 늘려 암호문의 보안을 향상시킬 수도 있습니다. .
비대칭 암호화
비대칭 암호화도 암호화 알고리즘이지만 위에서 설명한 대칭 암호화 알고리즘과 달리 공개 키와 개인 키 쌍을 사용하여 데이터를 암호화하고 복호화합니다. 비대칭 암호화에서는 공개 키가 공개되어 누구나 이를 사용하여 데이터를 암호화할 수 있지만, 개인 키를 보유한 사람만이 데이터를 해독할 수 있습니다.
비대칭 암호화 알고리즘은 다음 시나리오에서 널리 사용됩니다.
보안 통신: 비대칭 암호화는 네트워크 전송 중 데이터 보안을 보호할 수 있습니다. 예를 들어 비대칭 암호화 알고리즘은 웹 사이트 간의 통신을 보호하기 위해 HTTPS 프로토콜에 사용됩니다. 그리고 사용자.
디지털 서명: 비대칭 암호화는 개인 키를 사용하여 파일이나 데이터에 서명하여 파일이나 데이터의 무결성과 신뢰성을 확인할 수 있습니다. 예를 들어 비대칭 암호화 알고리즘은 디지털 서명의 보안을 보호하기 위해 디지털 인증서에 사용됩니다.
인증: 비대칭 암호화는 SSH 로그인이나 원격 데스크톱과 같은 인증에 개인 키를 사용할 수 있으며, 신원 인증 및 암호화된 통신에는 공개 키를 사용할 수 있습니다.
Python3.10에서는 표준 라이브러리의 암호화 모듈을 사용하여 비대칭 암호화를 구현할 수 있습니다. 다음은 암호화 모듈을 사용하여 공개 키와 개인 키 쌍을 생성하는 예입니다.
from cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import serialization # 生成公私钥 private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048) public_key = private_key.public_key() # 将公钥和私钥保存到文件 with open('private_key.pem', 'wb') as f: f.write(private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption())) with open('public_key.pem', 'wb') as f: f.write(public_key.public_bytes( encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo))
여기서는 rsa 모듈이 있습니다. 공개 키와 개인 키 쌍을 생성하는 데 사용됩니다. 직렬화 모듈을 사용하여 공개 키와 개인 키를 파일에 저장합니다. 실제 사용 시 공개키는 공개적으로 사용될 수 있으며, 개인키는 데이터 보안을 위해 안전한 곳에 보관해야 합니다.
결제 시스템에서는 비대칭 암호화가 널리 사용됩니다. 이 암호화 알고리즘 세트는 주로 결제 프로세스의 보안을 보장하기 위해 서명 및 서명 확인 작업을 생성하는 데 사용됩니다. Alipay 결제를 예로 들면:
def sign(self, unsigned_string): # 开始计算签名 key = self.app_private_key signer = PKCS1_v1_5.new(key) signature = signer.sign(SHA256.new(unsigned_string)) # base64 编码,转换为unicode表示并移除回车 sign = encodebytes(signature).decode("utf8").replace("\n", "") return sign def _verify(self, raw_content, signature): # 开始计算签名 key = self.alipay_public_key signer = PKCS1_v1_5.new(key) digest = SHA256.new() digest.update(raw_content.encode("utf8")) if signer.verify(digest, decodebytes(signature.encode("utf8"))): return True return False
공개 키입니다. 서명을 생성하는 데 사용되며 개인 키는 서명을 확인하는 데 사용됩니다.
区块链与非对称加密
非对称加密在区块链领域中的应用非常广泛。区块链是一个去中心化的分布式账本系统,由于其去中心化的特点,任何人都可以加入网络并参与交易,因此需要使用非对称加密来保护数据的隐私和安全性。
以下是一些非对称加密在区块链领域中的应用:
数字签名:在区块链中,数字签名用于验证交易的真实性和完整性。数字签名的过程是使用私钥对交易数据进行签名,然后在交易中包含签名和公钥,其他人可以使用公钥验证交易的真实性和完整性。
共识算法:区块链中的共识算法用于确定哪些交易应该被添加到区块中。共识算法通常需要参与者提供一定数量的加密学证据,如哈希值或数字签名,以证明他们有权参与共识。
区块链钱包:区块链钱包是用于存储和管理数字货币的介质。钱包通常使用非对称加密来保护用户的私钥,确保用户的数字货币不被盗窃或篡改。
加密货币交易所:加密货币交易所是用于买卖数字货币的平台。交易所通常使用非对称加密来保护用户的身份信息和交易数据的安全性。
可以使用Python3.10来完成区块链中的数字签名,同样使用Python的加密库 cryptography 来生成公私钥对、签名和验证签名。下面是一个简单的示例代码:
from cryptography.hazmat.primitives.asymmetric import ec from cryptography.hazmat.primitives import serialization, hashes from cryptography.hazmat.primitives.asymmetric.utils import encode_dss_signature, decode_dss_signature # 生成椭圆曲线公私钥对 private_key = ec.generate_private_key(ec.SECP256K1()) public_key = private_key.public_key() # 对数据进行签名 data = b"hello, world" signature = private_key.sign(data, ec.ECDSA(hashes.SHA256())) # 将签名和数据一起传输 signature_bytes = encode_dss_signature(*signature) data_with_signature = (data, signature_bytes) # 验证签名 data, signature_bytes = data_with_signature signature = decode_dss_signature(signature_bytes) public_key.verify(signature, data, ec.ECDSA(hashes.SHA256()))
首先,我们使用 ec.generate_private_key(ec.SECP256K1()) 方法生成一个椭圆曲线私钥。然后,我们可以通过 private_key.public_key() 方法获取对应的公钥。
接着,我们使用私钥对数据进行签名。这里使用 SHA256 哈希算法来计算数据的哈希值,并使用 ECDSA 签名算法对哈希值进行签名。
随后,我们将签名和数据一起传输。在实际应用中,签名和数据通常都是以二进制数据的形式进行传输。
最后,我们可以使用公钥来验证签名。首先,我们需要将签名从字节数据解码为两个整数。然后,我们可以使用 public_key.verify() 方法来验证签名是否正确。如果签名正确,这个方法将不会抛出异常;否则,将会抛出 InvalidSignature 异常。
위 내용은 Python의 Rake-comb 암호화 알고리즘: 유형 및 애플리케이션 시나리오의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











MySQL에는 무료 커뮤니티 버전과 유료 엔터프라이즈 버전이 있습니다. 커뮤니티 버전은 무료로 사용 및 수정할 수 있지만 지원은 제한되어 있으며 안정성이 낮은 응용 프로그램에 적합하며 기술 기능이 강합니다. Enterprise Edition은 안정적이고 신뢰할 수있는 고성능 데이터베이스가 필요하고 지원 비용을 기꺼이 지불하는 응용 프로그램에 대한 포괄적 인 상업적 지원을 제공합니다. 버전을 선택할 때 고려 된 요소에는 응용 프로그램 중요도, 예산 책정 및 기술 기술이 포함됩니다. 완벽한 옵션은없고 가장 적합한 옵션 만 있으므로 특정 상황에 따라 신중하게 선택해야합니다.

HADIDB : 가볍고 높은 수준의 확장 가능한 Python 데이터베이스 HadIDB (HADIDB)는 파이썬으로 작성된 경량 데이터베이스이며 확장 수준이 높습니다. PIP 설치를 사용하여 HADIDB 설치 : PIPINSTALLHADIDB 사용자 관리 사용자 만들기 사용자 : createUser () 메소드를 작성하여 새 사용자를 만듭니다. Authentication () 메소드는 사용자의 신원을 인증합니다. Fromhadidb.operationimportuseruser_obj = user ( "admin", "admin") user_obj.

해시 값으로 저장되기 때문에 MongoDB 비밀번호를 Navicat을 통해 직접 보는 것은 불가능합니다. 분실 된 비밀번호 검색 방법 : 1. 비밀번호 재설정; 2. 구성 파일 확인 (해시 값이 포함될 수 있음); 3. 코드를 점검하십시오 (암호 하드 코드 메일).

MySQL은 기본 데이터 저장 및 관리를위한 네트워크 연결없이 실행할 수 있습니다. 그러나 다른 시스템과의 상호 작용, 원격 액세스 또는 복제 및 클러스터링과 같은 고급 기능을 사용하려면 네트워크 연결이 필요합니다. 또한 보안 측정 (예 : 방화벽), 성능 최적화 (올바른 네트워크 연결 선택) 및 데이터 백업은 인터넷에 연결하는 데 중요합니다.

MySQL Workbench는 구성이 올바른 경우 MariadB에 연결할 수 있습니다. 먼저 커넥터 유형으로 "mariadb"를 선택하십시오. 연결 구성에서 호스트, 포트, 사용자, 비밀번호 및 데이터베이스를 올바르게 설정하십시오. 연결을 테스트 할 때는 마리아드 브 서비스가 시작되었는지, 사용자 이름과 비밀번호가 올바른지, 포트 번호가 올바른지, 방화벽이 연결을 허용하는지 및 데이터베이스가 존재하는지 여부를 확인하십시오. 고급 사용에서 연결 풀링 기술을 사용하여 성능을 최적화하십시오. 일반적인 오류에는 불충분 한 권한, 네트워크 연결 문제 등이 포함됩니다. 오류를 디버깅 할 때 오류 정보를 신중하게 분석하고 디버깅 도구를 사용하십시오. 네트워크 구성을 최적화하면 성능이 향상 될 수 있습니다

MySQL 데이터베이스 성능 최적화 안내서 리소스 집약적 응용 프로그램에서 MySQL 데이터베이스는 중요한 역할을 수행하며 대규모 트랜잭션 관리를 담당합니다. 그러나 응용 프로그램 규모가 확장됨에 따라 데이터베이스 성능 병목 현상은 종종 제약이됩니다. 이 기사는 일련의 효과적인 MySQL 성능 최적화 전략을 탐색하여 응용 프로그램이 고 부하에서 효율적이고 반응이 유지되도록합니다. 실제 사례를 결합하여 인덱싱, 쿼리 최적화, 데이터베이스 설계 및 캐싱과 같은 심층적 인 주요 기술을 설명합니다. 1. 데이터베이스 아키텍처 설계 및 최적화 된 데이터베이스 아키텍처는 MySQL 성능 최적화의 초석입니다. 몇 가지 핵심 원칙은 다음과 같습니다. 올바른 데이터 유형을 선택하고 요구 사항을 충족하는 가장 작은 데이터 유형을 선택하면 저장 공간을 절약 할 수있을뿐만 아니라 데이터 처리 속도를 향상시킬 수 있습니다.

MySQL 연결은 다음과 같은 이유로 인한 것일 수 있습니다. MySQL 서비스가 시작되지 않았고 방화벽이 연결을 가로 채고 포트 번호가 올바르지 않으며 사용자 이름 또는 비밀번호가 올바르지 않으며 My.cnf의 청취 주소가 부적절하게 구성되어 있습니다. 1. MySQL 서비스가 실행 중인지 확인합니다. 2. MySQL이 포트 3306을들을 수 있도록 방화벽 설정을 조정하십시오. 3. 포트 번호가 실제 포트 번호와 일치하는지 확인하십시오. 4. 사용자 이름과 암호가 올바른지 확인하십시오. 5. my.cnf의 바인드 아드 드레스 설정이 올바른지 확인하십시오.

데이터 전문가는 다양한 소스에서 많은 양의 데이터를 처리해야합니다. 이것은 데이터 관리 및 분석에 어려움을 겪을 수 있습니다. 다행히도 AWS Glue와 Amazon Athena의 두 가지 AWS 서비스가 도움이 될 수 있습니다.
