일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 분산 식별자
- did
- Config server
- 구피
- 조건문
- golang 강좌
- Feign
- rust
- 카디날
- 쌈채소
- 기본문법
- 치비
- 가재
- 체리새우
- 반복문
- Tendermint
- Python 강좌
- 애플 달팽이
- 주말농장
- 무화과
- 물생활
- MSSQL
- RSA
- rust 강좌
- 분산 신원
- 텐더민트
- MSA
- rust 소개
- for
- PKI
- Today
- Total
목록Rust (21)
comnic's Dev&Life

기본적인 PKI(Public Key Infrastructure) 구현 Rust에서 PKI(Public Key Infrastructure)를 구현하기 위해 가장 많이 사용되는 암호화 알고리즘 중 하나는 RSA(Rivest–Shamir–Adleman)입니다. RSA는 대표적인 공개키 알고리즘으로, 안전한 키 교환과 전자 서명을 위해 사용됩니다. Rust를 공부하는 입장으로 먼저 RSA를 직접 구현해 보고, 이후 rsa 라이브러리를 사용해서 구현해 보겠습니다. 1. 키 생성 RSA는 공개키와 비밀키로 이루어져 있습니다. 키는 두 개의 소수인 p와 q를 생성하고, n = pq로 계산됩니다. 그리고 양의 정수 e와 d를 선택하여 다음의 조건을 만족하는 공개키 (e, n)과 비밀키 (d, n)를 생성합니다. e와 ..
RSA로 서명하고 검증하기 RSA를 사용하여 기본적인 PKI(Public Key Infrastructure)를 구현해 보겠습니다. 이 예제에서는 다음의 단계를 따라갑니다. 키 생성: RSA 알고리즘을 사용하여 공개키와 개인키를 생성합니다. 서명: 개인키를 사용하여 메시지에 서명을 생성합니다. 검증: 공개키를 사용하여 서명이 유효한지 검증합니다. 먼저, rsa 라이브러리를 사용하여 RSA 알고리즘을 구현합니다. 이 라이브러리는 RSA 키 생성, 서명, 검증 등을 편리하게 다룰 수 있도록 도와줍니다. 먼저 [rsa, num-bigint]를 dependencies에 추가합니다. # Cargo.toml에 의존성 추가 [dependencies] rsa = "0.3.0" num-bigint = "0.4.0" 혹은 ..

14. 비동기 프로그래밍과 async/await Rust는 비동기 프로그래밍을 지원하기 위해 async/await 문법을 도입했습니다. 비동기 프로그래밍은 I/O 작업이나 이벤트 처리와 같은 작업에서 유용하며, 애플리케이션의 성능과 응답성을 향상시키는 데에 활용됩니다. 14. 1 async/await 문법 async / await는 아래 예제와 같이 사용할 수 있습니다. // async 함수 정의 async fn fetch_data() -> String { // 가상의 비동기 작업을 수행 tokio::time::sleep(tokio::time::Duration::from_secs(2)).await; "Data Fetched!".to_string() } // async 함수 호출 async fn main(..

13. 안전한 코드와 unsafe 키워드 13. 1 unsafe 키워드 Rust는 안전성을 강조하는 언어로써, 대부분의 코드는 안전한 규칙을 따르도록 설계되어 있습니다. 그러나 특정한 경우에는 안전성 규칙을 우회하고자 할 때 unsafe 키워드를 사용할 수 있습니다. unsafe 블록 내에서는 일반적인 Rust 안전성 규칙을 무시할 수 있습니다. fn main() { let mut data = 42; unsafe { // unsafe 블록 내에서 안전성 규칙을 우회 data = data + 1; println!("Unsafe result: {}", data); } // 여기서부터는 다시 안전한 코드 data = data * 2; println!("Safe result: {}", data); } unsaf..

12. 테스트와 에러 핸들링 Rust는 테스트 주도 개발(Test-Driven Development, TDD)을 지원하며, 코드의 안정성과 신뢰성을 확인하는 데에 사용됩니다. 12.1 테스트 작성과 실행 테스트는 #[test] 어트리뷰트를 사용하여 작성되며, cargo test 명령어를 통해 실행됩니다. // 소스 코드 fn add(a: i32, b: i32) -> i32 { a + b } // 테스트 코드 #[cfg(test)] mod tests { use super::*; #[test] fn test_add() { assert_eq!(add(2, 3), 5); assert_eq!(add(-1, 1), 0); assert_eq!(add(0, 0), 0); } } add 함수는 간단한 덧셈을 수행하는 함..

11. 병행성(Concurrency)과 동시성(Parallelism) 병행성은 여러 작업이 동시에 실행되는 것처럼 보이도록 하는 컴퓨터 과학의 개념입니다. Rust에서는 스레드를 통한 병행성을 지원합니다. 각 스레드는 독립적으로 실행되며, 여러 스레드가 동시에 진행되는 것처럼 보입니다. 동시성은 물리적인 멀티코어 CPU에서 여러 작업이 실제로 동시에 실행되는 것을 의미합니다. Rust는 동시성을 지원하기 위해 여러 접근 방식을 제공합니다. 주로 벡터화, 병렬 컬렉션, 및 Rayon 라이브러리 등을 통해 병렬 처리를 지원합니다. 11. 1 스레드와 안전한 공유 상태 Rust에서는 스레드를 통한 병행성을 지원하고, 안전한 공유 상태를 보장하기 위해 소유권 시스템과 트레이트를 활용합니다. 여러 스레드 간에 데..

10. 제네릭 프로그래밍 제네릭 데이터 타입은 Rust에서 타입의 일반성을 높이기 위해 사용되는 기능으로, 코드를 추상화하고 재사용성을 높이는 데에 기여합니다. 제네릭은 함수나 구조체 등에서 사용할 수 있으며, 특정 타입을 고정하지 않고 여러 다양한 타입에서 동작하도록 설계됩니다. 10.1 제네릭 함수와 구조체: 일반적인 함수와 함수 호출에 대한 예제를 먼저 살펴보겠습니다. fn print_number(value: i32) { println!("Value: {}", value); } fn print_string(value: &str) { println!("Value: {}", value); } fn main() { print_number(42); print_string("Hello"); // print_..

9. 생성자와 소멸자, RAII(Resource Acquisition Is Initialization) 개념 9.1 생성자와 소멸자 메소드 정의 생성자(new 메소드): Rust에서는 impl 블록 내에서 new라는 이름을 가진 함수를 통해 생성자 역할을 수행합니다. 이 함수는 보통 새로운 객체를 생성하고 초기화하는 데 사용됩니다. struct MyResource { data: String, } impl MyResource { fn new(initial_data: &str) -> MyResource { println!("리소스 생성"); MyResource { data: String::from(initial_data), } } } MyResource 구조체에는 data라는 필드가 있습니다. impl 블록..