web3.eth.accounts 和 web3.eth.personal 创建account的区别 ?
web3.js 提供了两个packages用于创建账号,签署交易和执行一些与账号相关的操作。“web3.eth.accounts.create” 和 “web3.eth.personal.newAccount”。 应该使用哪一个? 哪一个更安全?
确切地说,两者都是安全的,但是必须在正确的环境中使用。 在本地节点上执行任何的操作,应该使用web3.eth.accounts,这意味着本地桌面钱包(如Mist,Ethereum Wallet)会使用web3.eth.accounts创建帐户,保存私钥,签署交易等操作。 因此,由于操作是在本地执行的,所以私钥不会被发送到网络上的某个其他节点,所以它们特别安全。 这就是为什么桌面钱包(如Mist,Ethereum Wallet)需要将整个区块链同步到本地系统的原因,并且在登出之前不需要登录,因为您的帐户信息暂时存储在本地,除非整个数据被从应用程序文件夹中清除。
另一方面,如果您想与另一个节点的帐户进行交互,则使用web3.eth.personal,这意味着您发送的任何密码将被其他节点完全使用,这就是为什么web3.eth.personal不用于创建account或保存私钥,而且仅用于使用节点本身。 另外,让我们考虑一下像steam.it这样的应用程序必须在用户投票时发送tokens给用户的情况, 所需要做的是,我需要与具有大量steam tokens 的节点帐户进行交互,并且我必须将它们转移到用户公共地址。 在这种情况下,我不会创建新地址或钱包,而只是使用服务器上已创建的帐户来传输tokens。
如何生成密钥,私钥,签名
数字签名主要经过以下几个过程:信息发送者使用一单向散列函数(HASH函数)对信息生成信息摘要;信息发送者使用自己的私钥签名信息摘要;信息发送者把信息本身和已签名的信息摘要一起发送出去;信息接收者通过使用与信息发送者使用的同一个单向散列函数(HASH函数)对接收的信息本身生成新的信息摘要,再使用信息发送者的公钥对信息摘要进行验证,以确认信息发送者的身份和信息是否被修改过。数字加密主要经过以下几个过程:当信息发送者需要发送信息时,首先生成一个对称密钥,用该对称密钥加密要发送的报文;信息发送者用信息接收者的公钥加密上述对称密钥;信息发送者将第一步和第二步的结果结合在一起传给信息接收者,称为数字信封;信息接收者使用自己的私钥解密被加密的对称密钥,再用此对称密钥解密被发送方加密的密文,得到真正的原文。数字签名和数字加密的过程虽然都使用公开密钥体系,但实现的过程正好相反,使用的密钥对也不同。数字签名使用的是发送方的密钥对,发送方用自己的私有密钥进行加密,接收方用发送方的公开密钥进行解密,这是一个一对多的关系,任何拥有发送方公开密钥的人都可以验证数字签名的正确性。数字加密则使用的是接收方的密钥对,这是多对一的关系,任何知道接收方公开密钥的人都可以向接收方发送加密信息,只有唯一拥有接收方私有密钥的人才能对信息解密。另外,数字签名只采用了非对称密钥加密算法,它能保证发送信息的完整性、身份认证和不可否认性,而数字加密采用了对称密钥加密算法和非对称密钥加密算法相结合的方法,它能保证发送信息保密性。
如何通过RSA生成唯一的公钥和私钥
在ubuntu上要使用openssl的话需要先进行安装,命令如下:
sudo apt-get install openssl
安装完成就可以使用openssl了。
首先需要进入openssl的交互界面,在命令行了输入openssl即可;
1)生成RSA私钥:
genrsa -out rsa_private_key.pem 1024
该命令会生成1024位的私钥,生成成功的界面如下:
此时我们就可以在当前路径下看到rsa_private_key.pem文件了。
2)把RSA私钥转换成PKCS8格式
输入命令pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt,并回车
得到生成功的结果,这个结果就是PKCS8格式的私钥,如下图:
3) 生成RSA公钥
输入命令rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem,并回车
如何生成公,私钥
常用命令如下:--生成RSA私钥(传统格式的)openssl genrsa -out rsa_private_key.pem 1024--将传统格式的私钥转换成PKCS#8格式的openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt--生成RSA公钥openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
web3js导入私钥
web3js导入私钥:
1、将使用web3提供的函数sendRawTransaction。
2、使用私钥对原始的交易信息进行签名,得到签名后的交易数据。