当前位置:网站首页>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"
边栏推荐
- [groovy] string (string type variable definition | character type variable definition)
- In MySQL Association query, the foreign key is null. What if the data cannot be found?
- [deep learning] deep learning reference materials
- Basic authorization command for Curl
- [Chongqing Guangdong education] 2777t green space planning reference questions of National Open University in autumn 2018
- Kubernetes -- cluster expansion principle
- [wp][入门]刷弱类型题目
- 企业级:Spire.Office for .NET:Platinum|7.7.x
- 面试字节,过关斩将直接干到 3 面,结果找了个架构师来吊打我?
- grandMA2 onPC 3.1.2.5的DMX参数摸索
猜你喜欢

Smart pointer shared_ PTR and weak_ Difference of PTR

UI automation test farewell to manual download of browser driver

How about programmers' eyesight| Daily anecdotes
![[untitled]](/img/53/f67c53d4ada382ec42f97cf68d9c71.jpg)
[untitled]

51 independent key basic experiment

ABP vNext microservice architecture detailed tutorial - distributed permission framework (Part 1)

ActiveReportsJS 3.1 VS ActiveReportsJS 3.0

error Couldn‘t find a package.json file in “你的路径“
![[positioning in JS]](/img/f1/02ce74fadc1f7524c7abca9db66c71.jpg)
[positioning in JS]

MindFusion.Virtual Keyboard for WPF
随机推荐
[untitled]
面试汇总:这是一份全面&详细的Android面试指南
[Chongqing Guangdong education] 2777t green space planning reference questions of National Open University in autumn 2018
特殊版:SpreadJS v15.1 VS SpreadJS v15.0
[move pictures up, down, left and right through the keyboard in JS]
深度学习——LSTM基础
ABP vNext microservice architecture detailed tutorial - distributed permission framework (Part 1)
Is there any way to change the height of the uinavigationbar in the storyboard without using the UINavigationController?
[C language] address book - dynamic and static implementation
[groovy] groovy environment setup (download groovy | install groovy | configure groovy environment variables)
Google Chrome CSS will not update unless the cache is cleared - Google Chrome CSS doesn't update unless clear cache
Assembly - getting started
Technology sharing swift defense programming
Kubernetes - identity and authority authentication
An elegant program for Euclid‘s algorithm
Unity implements the code of the attacked white flash (including shader)
An elegant program for Euclid‘s algorithm
This article takes you to understand the relationship between the past and present of Bi and the digital transformation of enterprises
线程基础知识
我就一写代码的,王总整天和我谈格局...