首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何生成Terra的私钥,比如Terra站钱包产生的私钥?

如何生成Terra的私钥,比如Terra站钱包产生的私钥?
EN

Stack Overflow用户
提问于 2022-03-29 06:46:41
回答 2查看 837关注 0票数 1

有人知道Terra站钱包是如何生成364字符私钥的吗?我正在寻找一种方法来生成这364个字符私钥使用terra,但长度的mk = MnemonicKey()mk.private_key不是364个字符。

感谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-03 13:46:20

你激发了我的好奇心。我查看了Terra站点代码(我选择了手机),看看他们是如何做到的。我首先搜索UI中的“Export”,它看起来是AuthDataValueType中的加密密钥字符串。

这里是他们从密钥商店里读出来的。https://github.com/terra-money/station-mobile/blob/f74c4224986fd9ed32b4380b537e9ae13ca05c3e/src/utils/authData.ts#L15

这里是他们为新找回的钱包创造的地方。https://github.com/terra-money/station-mobile/blob/3ec15b9a620432dee47378f5b6e621d93780748a/src/utils/wallet.ts#L66

最后,这里是加密的util函数。https://github.com/terra-money/station-mobile/blob/3ec15b9a620432dee47378f5b6e621d93780748a/src/utils/crypto.ts

这都是NodeJS/ReactNative,因此您需要在Python中创建相同的加密/解密、密码和存储流(如果需要的话)。

票数 1
EN

Stack Overflow用户

发布于 2022-05-27 20:35:49

Terra的导入“密钥”实际上是一个base64编码的JSON对象,包含钱包名称、Terra地址和私钥(这是进一步加密的和base64编码的)。这是一些创建它的C# (您需要使用类似MnemonicCode变换器的网页获取私钥)--在顶部填充字符串变量:

代码语言:javascript
复制
        string privatekey = @"";  
        string walletName = @"";
        string address = @"";
        string password = @"changeme";

        byte[] salt = Encoding.UTF8.GetBytes("kopwemdmondawfwa");
        byte[] iv = Encoding.UTF8.GetBytes("dgfdkfsokwedopmf");
        int iterations = 100;
        int keySize = 256;

        var myRijndael = new RijndaelManaged();

        myRijndael.KeySize = keySize; 
        myRijndael.IV = iv;

        var rfc2898 = new Rfc2898DeriveBytes(System.Text.Encoding.UTF8.GetBytes(password), salt, iterations);
        byte[] key = rfc2898.GetBytes(keySize / 8);

        myRijndael.Key = key;
        myRijndael.Padding = PaddingMode.PKCS7;
        myRijndael.Mode = CipherMode.CBC;
        ICryptoTransform transform = myRijndael.CreateEncryptor();

        byte[] bak = new System.Text.UTF8Encoding().GetBytes(privatekey);
        byte[] encrypted = transform.TransformFinalBlock(bak, 0, bak.Length);

        string saltStr = BitConverter.ToString(salt).Replace("-", ""); 
        string ivStr = BitConverter.ToString(iv).Replace("-", "");  
        string cipherStr = System.Convert.ToBase64String(encrypted);

        string keyString = saltStr + ivStr + cipherStr;

        string res = "{ \"name\":\"" + walletName + "\",\"address\":\"" + address + "\",\"encrypted_key\":\"" + keyString + "\"}";
        byte[] resBytes = new System.Text.UTF8Encoding().GetBytes(res);
        string base64 = System.Convert.ToBase64String(resBytes);

        File.WriteAllText(@"c:\temp\ts_exported_key.txt", base64);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71657582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档