我可以访问solana帐户的私钥(通过phantom)来加密数据吗



据我所知,每个帐户都由一个公钥/私钥表示。公钥可以随时访问,而私钥(显然(从未显示过。

然而,有没有一种方法可以访问索拉纳的私钥(通过幻影(,这样数据就可以被加密,然后保存到区块链中?

其想法是:两个地址相互作用,并通过Diffie-Hellman密钥交换使用组合密钥来加密消息/内容,这样只有这两个地址才能读取消息

如果您查看@solana/钱包适配器,钱包接口提供了signMessage功能:https://github.com/solana-labs/wallet-adapter/blob/469edb5dd45231d397751b0268c86dffd6ed730a/packages/core/react/src/useWallet.ts#L37它只加密您传递给它的任何字节数组。请参阅https://github.com/solana-labs/wallet-adapter/blob/a5b1ebd70ae9753d188fec60e95e252402f3f371/packages/core/base/src/signer.ts#L55

这样,您就无法访问私钥,但您可以对任何任意消息进行签名,这就足够了。如果不是,请随意创建问题并建议添加到界面中。

您不能访问任何私钥。如果可以的话,它就不会被称为私钥。除非私钥所有者明确发布。

您可以为帐户创建一个密钥对,然后保存此密钥对。例如,创建一个新文件keypairGenerator.js并添加以下内容:

const fs=require('fs')
const anchor=require("@project-serum/anchor")
const account=anchor.web3.Keypair.generate()
fs.writeFileSync('./keypair.json',JSON.stringify(account))

这将把密钥对写入keypair.json文件,它看起来像这样:

{"_keypair":{
"publicKey":{"0":129,"1":88,"2":146,"3":38,"4":224,"5":124,"6":88,"7":26,"8":244,"9":238,"10":238,"11":61,"12":140,"13":33,"14":116,"15":74,"16":161,"17":184,"18":56,"19":194,"20":189,"21":151,"22":82,"23":29,"24":226,"25":204,"26":94,"27":142,"28":1,"29":130,"30":5,"31":222},
"secretKey":{"0":220,"1":93,"2":217,"3":140,"4":50,"5":48,"6":225,"7":236,"8":144,"9":88,"10":167,"11":3,"12":60,"13":179,"14":31,"15":102,"16":161,"17":190,"18":91,"19":173,"20":89,"21":19,"22":159,"23":203,"24":66,"25":188,"26":210,"27":50,"28":159,"29":16,"30":28,"31":234,"32":129,"33":88,"34":146,"35":28,"36":224,"37":144,"38":88,"39":26,"40":244,"41":238,"42":238,"43":61,"44":140,"45":33,"46":116,"47":74,"48":161,"49":184,"50":56,"51":194,"52":189,"53":151,"54":82,"55":29,"56":226,"57":204,"58":93,"59":132,"60":1,"61":130,"62":5,"63":222}}}

在您的项目中,假设使用javascript:编写

import keypair from './keypair.json'
// Object.values will get the values of keypair._keypair.secretKey object into array
const keypairArray=Object.values(keypair._keypair.secretKey)
const secret=new Uint8Array(keypairArray)
const account=web3.Keypair.fromSecretKey(secret)

最新更新