네임스페이스 ra::RSA 암호화
8122 단어 cryptoshowdevcppopensource
겨냥하다:
작동하는 RSA 코드를 만들려면 여기 링크GitHub 리포지토리를 사용하세요!
RSA 란 무엇입니까?
RSA(Rivest-Shamir-Adleman)는 비대칭 암호화 알고리즘입니다. 비대칭 암호화는 하나의 키로 상자(데이터)를 잠그고 다른 키로 잠금 해제할 수 있는 경우입니다. 잠금 키는 상자의 잠금을 해제할 수 없으며 그 반대의 경우도 마찬가지입니다. 잠금 키는 공개 키이고 잠금 해제 키는 개인 키입니다. 공개 키는 공개적으로 배포하므로 누구나/누구나 암호화된 메시지를 사용자에게 보내고 사용자는 비공개로 개인 키를 사용하여 잠금을 해제할 수 있습니다. 열쇠.
사용자 자신에게 비공개로 유지함으로써 해커는 잠금 해제 방법을 얻을 수 없습니다.
RSA는 어떻게 작동합니까?
https://ra101.hashnode.dev/rsa-encryption-algorithm
암호:
비공개 회원:
private_key
public_key
create_key(long seed)
공개 회원:
Constructor
& Constructor(seed)
std::size_t decrypt(std::size_t);
std::size_t decrypt_with_padding(std::string);
Key Getters
std::size_t sign(Message message)
내부
namespace
와 외부class
의 기타 기능(공개 키를 사용하는 모든 기능):std::size_t encrypt(std::size_t digest, public_key);
std::string encrypt_with_padding(std::size_t digest, public_key);
bool verify(Message message, size_t digest, public_key)
string padding(string)
생성자:
생성자의 seed는
random prime engine
에서 사용되며 seed 인수의 논리는 다음과 같습니다.# pseudo code implemented in python
def constructor(seed=None):
if not seed:
seed = timestamp()
else:
seed = hash(seed)
return create_key(seed)
// Usage
ra::rsa_key_pair k1, k2("127.0.0.1");
create_key(시드) 함수,
나는 모든 수학을 다루지는 않겠지만 결국 2개의 기본 숫자를 사용하여
(n, e, d) 모두 정수입니다.
이 두 숫자(n, e/d)를 연결하려면 다음과 같이 큰 숫자
BIG_NO
를 정의합니다.#define BIG_NO 100000000000
public_key = n * BIG_NO + e;
private_key = n * BIG_NO + d;
암호화(다이제스트, 키) 기능,
return (digest ** e) % n
암호 해독(encrypted_data) 함수,
return (encrypted_data ** d) % n
패딩(문자열 str) 함수,
#define PAD_SIZE 10
// 12345 -> 0000012345
while (str.length() < PAD_SIZE)
{
str = '0' + str; // add 0 in front of no.
}
return str;
encrypt_with_padding(다이제스트, 키) 함수,
# encrypt each digit
for each_digit in digest:
output = padding(encrypt(each_digit)) + output
return output
Decrypt_with_padding(encrypted_data) 함수,
# cut the input string in chunks of length PAD_SIZE
# decrypt each chunk to digit and then form a output
for i_chunk in len(encrypted_data)/PAD_SIZE:
i = i_chunk * PAD_SIZE
digit = decrypt(int(encrypted_data[i: i + PAD_SIZE]))
output = digit + output * 10
return output
기호(메시지 메시지) 기능,
return decrypt(hash(message))
verify(메시지 메시지, 다이제스트, other_public_key) 함수,
return ( hash(message) == encrypt(digest, others_public_key) )
모든 코드는 아래 링크에서 찾을 수 있습니다: https://github.com/ra101/RSA-cpp
Reference
이 문제에 관하여(네임스페이스 ra::RSA 암호화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ra101/namespace-ra-rsa-cryptography-45lb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)