当前位置:网站首页>Rust区块琏开发——签名加密与私钥公钥
Rust区块琏开发——签名加密与私钥公钥
2022-07-05 03:40:00 【知来者逆】
签名与加密
1.使用私钥加加密信息,然后用公钥解密信息,就是数学签名,签名的意义是保证信息的来源是私钥持有者。
2.使用公钥加密,私钥解密,就是加密传输,是为保证信息即使暴露出来也只有私钥持有者才能解密读懂。
3.要实现签名或者加密,一般分为三个步骤,生成密钥对算法,私钥签名算法,公钥验证算法。
代码示例
1.Rust提供了crypto库,它实现了包含了密码学中常用的对称密码、公钥密码、单向散列函数、消息认证码、数字签名、随机数生成器等算法等等。
2.这里签名要用到ed25519这人算法。
依赖
[dependencies]
rust-crypto = "^0.2"
secp256k1 = "0.23.1"
hex = "0.4.3"
sha256 = "1.0.3"
对信息进行签名
fn sign(seed_key : String,content:String) -> ([u8;64],[u8;32],[u8;64])
{
let seed_bytes = digest_bytes(seed_key.as_bytes());
let seed_u8 = hex::decode(seed_bytes).expect("Invalid Hex String");
let mut seed: [u8;32] = [0u8;32];
let mut i = 0;
for val in seed_u8
{
seed[i] = val;
i = i+ 1;
}
let (private_key, public_key) = keypair(seed.as_ref()); //[U8,64]
let sig = signature(content.as_bytes(), &private_key); //[U8,64]
(private_key,public_key,sig)
}
验证签名
let seed = "3nuhx-7yzml-5uet3-7eplx-kq4u5-roww3-zf6ju-vdvaf-s7q4u".to_string();
let content = "13445927681169508792";
let (private_key,public_key,signature) = sign(seed, content.to_string());
print!("private key = {:?},\npublic key = {:?},\nsignature = {:?} \n",private_key,public_key,signature);
print!("verify = {:?}",verify(content.as_bytes(), &public_key, &signature));
private key = [189, 205, 57, 2, 52, 206, 172, 150, 110, 248, 19, 146, 86, 244, 107, 190, 49, 227, 130, 188, 139, 207, 157, 94, 226, 25, 27, 15, 172, 38, 160, 108, 19, 100, 112, 203, 240, 28, 155, 193, 252, 17, 194, 53, 43, 146, 165, 135, 131, 100, 154, 142, 226, 120, 180, 51, 203, 162, 168, 38, 156, 49, 115, 95],
public key = [19, 100, 112, 203, 240, 28, 155, 193, 252, 17, 194, 53, 43, 146, 165, 135, 131, 100, 154, 142, 226, 120, 180, 51, 203, 162, 168, 38, 156, 49, 115, 95],
signature = [222, 13, 90, 4, 73, 2, 58, 240, 183, 110, 19, 120, 251, 76, 219, 9, 125, 151, 156, 218, 3, 12, 237, 209, 3, 237, 176, 152, 42, 201, 186, 113, 79, 66, 6, 249, 245, 232, 102, 29, 54, 184, 249, 31, 49, 135, 226, 164, 158, 245, 76, 213, 36, 191, 161, 44, 122, 132, 47, 221, 172, 46, 144, 1]
3.把签名转成String输出。
fn au8_to_string(signature_code : [u8;64]) ->String
{
use std::fmt::Write;
let mut signature_string = String::new();
for a in signature_code.iter()
{
write!(signature_string, "{:02x}", a);
}
signature_string
}
"de0d5a0449023af0b76e1378fb4cdb097d979cda030cedd103edb0982ac9ba714f4206f9f5e8661d36b8f91f3187e2a49ef54cd524bfa12c7a842fddac2e9001"
边栏推荐
- Technology sharing swift defense programming
- Basic knowledge of tuples
- speed or tempo in classical music
- Delphi free memory
- Kubernetes - Multi cluster management
- Nmap user manual learning records
- Binary heap implementation (priority queue implementation)
- Google Chrome CSS will not update unless the cache is cleared - Google Chrome CSS doesn't update unless clear cache
- Redis6-01nosql database
- Installation of postman and postman interceptor
猜你喜欢
Thread Basics
[learning notes] month end operation -gr/ir reorganization
已解决(sqlalchemy+pandas.read_sql)AttributeError: ‘Engine‘ object has no attribute ‘execution_options‘
How to define a unified response object gracefully
Containerization Foundation
Clickhouse synchronization MySQL (based on materialization engine)
DMX parameter exploration of grandma2 onpc 3.1.2.5
Why do some programmers change careers before they are 30?
UI自动化测试从此告别手动下载浏览器驱动
How to learn to get the embedding matrix e # yyds dry goods inventory #
随机推荐
汇编-入门
UI自動化測試從此告別手動下載瀏覽器驅動
Is there any way to change the height of the uinavigationbar in the storyboard without using the UINavigationController?
Redis之Jedis如何使用
[数组]566. 重塑矩阵-简单
Binary heap implementation (priority queue implementation)
Anti debugging (basic principles of debugger Design & NT NP and other anti debugging principles)
Why do some programmers change careers before they are 30?
Kubernetes - identity and authority authentication
Huawei MPLS experiment
Flex flexible layout
[Chongqing Guangdong education] 2777t green space planning reference questions of National Open University in autumn 2018
Necessary fonts for designers
官宣!第三届云原生编程挑战赛正式启动!
De debugging (set the main thread as hidden debugging to destroy the debugging Channel & debugger detection)
深度学习——LSTM基础
[web source code code code audit method] audit skills and tools
反絮凝剂-氨碘肽滴眼液
Quick start of UI component development of phantom engine [umg/slate]
Kubernetes - identity and authority authentication