当前位置:网站首页>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"
边栏推荐
- MySQL winter vacation self-study 2022 11 (9)
- @Transactional 注解导致跨库查询失效的问题
- 已解决(sqlalchemy+pandas.read_sql)AttributeError: ‘Engine‘ object has no attribute ‘execution_options‘
- How is the entered query SQL statement executed?
- 灵魂三问:什么是接口测试,接口测试怎么玩,接口自动化测试怎么玩?
- Thread Basics
- Huawei MPLS experiment
- error Couldn‘t find a package.json file in “你的路径“
- Enterprise level: spire Office for . NET:Platinum|7.7. x
- Difference between MotionEvent. getRawX and MotionEvent. getX
猜你喜欢
[groovy] groovy environment setup (download groovy | install groovy | configure groovy environment variables)
特殊版:SpreadJS v15.1 VS SpreadJS v15.0
面试字节,过关斩将直接干到 3 面,结果找了个架构师来吊打我?
How is the entered query SQL statement executed?
error Couldn‘t find a package.json file in “你的路径“
Why do some programmers change careers before they are 30?
【web審計-源碼泄露】獲取源碼方法,利用工具
A brief introduction to the behavior tree of unity AI
Clickhouse materialized view
Enterprise level: spire Office for . NET:Platinum|7.7. x
随机推荐
Analysis of glibc strlen implementation mode
[software reverse - basic knowledge] analysis method, assembly instruction architecture
测试开发是什么?为什么现在那么多公司都要招聘测试开发?
How is the entered query SQL statement executed?
Nmap使用手册学习记录
【软件逆向-分析工具】反汇编和反编译工具
Thread Basics
Kubernetes - identity and authority authentication
线程基础知识
[punch in questions] integrated daily 5-question sharing (phase III)
How to define a unified response object gracefully
[untitled]
Why do some programmers change careers before they are 30?
[an Xun cup 2019] not file upload
[groovy] groovy environment setup (download groovy | install groovy | configure groovy environment variables)
Installation of postman and postman interceptor
Deflocculant aminoiodotide eye drops
It took two nights to get Wu Enda's machine learning course certificate from Stanford University
Some enterprise interview questions of unity interview
How about programmers' eyesight| Daily anecdotes