当前位置:首页 » 比特币问答 » 比特币私钥privkey

比特币私钥privkey

发布时间: 2021-07-25 00:09:20

『壹』 私钥字符串如何转成PrivateKey对象

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;

import com.icardpay.tds.stp.fastpay.common.Convertor;
import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import tangdi.engine.context.Log;

/**
* RSAHelper - 对RSA 签名&验签/分段加密&分段解密 的包装 签名算法: "SHA1withRSA", 私钥进行签名; 公钥进行验签.
* 加密算法: "RSA/ECB/PKCS1Padding", 公钥进行加密; 私钥进行解密.
*
* [localPrivKey]是自己的私钥, 自己的公钥给通信对方. [peerPubKey]是对方的公钥, 对方的私钥在对方那边. 为了方便,
* 这里假定双方的密钥长度一致, 签名和加密的规则也一致.
*
* 以`Base64Str`结尾的参数表示内容是Base64编码的字符串, 其他情况都是raw字符串.
*/

public class RSAHelper {

private static RSAHelper instance = null;

public static final String KEY_ALGORITHM = "RSA";
public static final String SIGNATURE_ALGORITHM = "SHA1withRSA";
public static final String CIPHER_ALGORITHM = "RSA/ECB/PKCS1Padding"; // 加密block需要预留11字节
public static final int KEYBIT = 2048;
public static final int RESERVEBYTES = 11;

private static PrivateKey localPrivKey;
private static PublicKey peerPubKey;

private RSAHelper() {
}

public static RSAHelper getInstance(){
if(instance == null){
//双重检查加锁,只有在第一次实例化时,才启用同步机制,提高了性能。
synchronized(RSAHelper.class){
if(instance == null){
String localPrivKeyBase64Str = CmbcProps.getInstance().getConfigItem("OTHERLOCALPRIVKEY", "");
String peerPubKeyBase64Str = CmbcProps.getInstance().getConfigItem("OTHERPEERPUBKEY", "");

try {
/**
* 初始化自己的私钥,对方的公钥以及密钥长度.
* localPrivKeyBase64Str
* Base64编码的私钥,PKCS#8编码. (去掉pem文件中的头尾标识)
* peerPubKeyBase64Str
* Base64编码的公钥. (去掉pem文件中的头尾标识)
*/
BASE64Decoder base64Decoder = new BASE64Decoder();

byte[] buffer1 = base64Decoder.decodeBuffer(localPrivKeyBase64Str);
PKCS8EncodedKeySpec keySpec1 = new PKCS8EncodedKeySpec(buffer1);
KeyFactory keyFactory1 = KeyFactory.getInstance(KEY_ALGORITHM);
localPrivKey = keyFactory1.generatePrivate(keySpec1);

byte[] buffer2 = base64Decoder.decodeBuffer(peerPubKeyBase64Str);
KeyFactory keyFactory2 = KeyFactory.getInstance(KEY_ALGORITHM);
X509EncodedKeySpec keySpec2 = new X509EncodedKeySpec(buffer2);
peerPubKey = keyFactory2.generatePublic(keySpec2);

/**
* 实例化对象
*/
instance = new RSAHelper();
} catch (NoSuchAlgorithmException e) {
Log.info("无此算法");
} catch (InvalidKeySpecException e) {
Log.info("公钥非法");
} catch (IOException e) {
Log.info("公钥数据内容读取错误");
} catch (NullPointerException e) {
Log.info("公钥数据为空");
} catch (Exception e) {
Log.error(e, "初始化密钥失败");
}
}
}
}

『贰』 Privatekey私钥是什么

比特币的语境中,是指与一个地址(这个地址是与这个私钥相对应的公钥的哈希值)相关联的一把密钥。它存放在后台,使得你可以发送之前被发送到这个地址的比特币出去。需要留意的是,因为比特币使用的加密算法是ECDSA椭圆曲线数字签名算法,公钥和地址都可以从私钥推出

『叁』 importprivkey 私钥 为什么是null

不知明镜里,何处得秋霜.

『肆』 如何从不同的客户端转移比特币钱包

从http://www.taobtc.net/下载bitcoin-qt客户端的钱包文件是wallet.dat,Multibit客户端的钱包文件是multibit.wallet,这两个文件的文件名、大小和格式均不相同,那么如何切换呢?如果不需要保存原来的地址的话,直接把币发送到Multibit的地址中是最方便的办法了。如果需要保留原来的地址,可以通过导出-导入私钥的方法,具体如下:1. 打开bitcoin-QT客户端,找到自己存钱的地址(你可能有多个地址,找到存有币的那个),右键-复制;2. 依次打开 帮助 - 调试窗口 - 控制台,输入命令 mpprivkey (空格) ,粘贴刚才复制的地址,回车;3. 现在你应该能看到你得私钥了,它是一串52位的字符,复制下来;4. 打开Multibit,假设你这里面没钱,选择工具 - 导出私钥,选择路径,选择不需要加密,点导出私钥;5. 用记事本打开刚才导出的.key文件,这里面存了你刚才导出的私钥(以#开头的行是注释),把这个私钥换成你刚才复制的那个,后面的时间可以不动,保存后退出;6. 点 工具 - 导入私钥,选择刚才修改的.key文件,导入;7. 短暂的更新以后你应该就能看到导入的原来的地址,还有原来地址中你的余额。提醒:1. 务必不要泄露你的私钥,知道了私钥就可以支配对应地址里的比特币!2. 其他客户端,如electrum, Armory都可以用类似的方法导入和导出,但是私钥的格式有51位的和52位的,可能不全通用。

『伍』 比特币钱包转移怎么操作转移到哪里更安全

1.
打开bitcoin-QT客户端,找到自己存钱的地址(你可能有多个地址,找到存有币的那个),右键-复制;
2.
依次打开
帮助
-
调试窗口
-
控制台,输入命令
mpprivkey
(空格)
,粘贴刚才复制的地址,回车;
3.
现在你应该能看到你得私钥了,它是一串52位的字符,复制下来;
4.
打开Multibit,假设你这里面没钱,选择工具
-
导出私钥,选择路径,选择不需要加密,点导出私钥;
5.
用记事本打开刚才导出的.key文件,这里面存了你刚才导出的私钥(以#开头的行是注释),把这个私钥换成你刚才复制的那个,后面的时间可以不动,保存后退出;
6.

工具
-
导入私钥,选择刚才修改的.key文件,导入;
7.
短暂的更新以后你应该就能看到导入的原来的地址,还有原来地址中你的余额。提醒:
1.
务必不要泄露你的私钥,知道了私钥就可以支配对应地址里的比特币!
2.
其他客户端,如electrum,
Armory都可以用类似的方法导入和导出,但是私钥的格式有51位的和52位的,可能不全通用。

『陆』 如何在Core钱包中提取BCC

对任何钱包都通用的领取BCC的办法就是提取私钥,然后导入BCC钱包。
如果你的比特币是存在bitcoin qt\core\unlimited\classic等完整节点钱包,最简单的办法就是将你原来的bitcoin钱包里的wallet.dat文件复制到你新安装的bitcoin abc对应的目录里。就可以了。

一般bitcoin 钱包的wallet.dat存放路径在不同的系统下是不一样的,一般情况下是在以下目录:
Win7: %APPDATA%\Bitcoin\ (直接在运行命令行里输入这串字符就可以找到wallet.dat文件)
Win10:\Program Files\Bitcoin\Bitcoin
Mac OS:~/Library/Application Support/Bitcoin/

你也可以单独将某个私钥导入到bitcoin abc钱包
第一步是先找出你存有BCC币的地址的私钥。
如果是存在bitcoin core\qt\unlimited\classic等 钱包,则先打开bitcoin,然后复制对应的地址,然后点击:
“帮助——调试窗口——控制台”
在命令窗口处输入;
walletpassphrase abc123 600
(命令解释:walletpassphrase就是在你指定的时间内解除钱包密码,第一个参数是密码,后面跟着第二个参数是你需要解除密码的时间,单位是秒。我这里使用的密码是abc123,600秒内解除密码。记得两个参数前面都有空格哦。)
然后再在命令窗口处输入:
mpprivkey 地址(如)
(命令解释:mpprivkey就是将后面比特币地址对应的私钥以明文方式显示。记得参数前面有空格哦。)
输入以上命令后回车,你就得到一串字符串,有字母有数字。这串字符串就是你对应地址的私钥。
复制你这串私钥。
如果你的地址是存在某个轻钱包,比如比太,你可以先使用比太的导出私钥明文功能:
“点击有币的地址——右上角三个点呼出菜单——私钥管理——私钥明文”
输入密码后,你就可以看到你的私钥明文了。
如果你使用的地址是存在HD钱包,比如Breadwallet,你也可以先找到密语:

『柒』 如何从pem格式的私钥文件中读取私钥

以下命令来生成密钥对。

$openssl genrsa -out mykey.pem 2048

$openssl pkcs8 -topk8 -inform PEM -outform PEM -in mykey.pem \
-out private_key.pem -nocrypt

这个命令得到的公共密钥。
$ openssl rsa -in mykey.pem -pubout -outform DER -out public_key.der

我写了两方法读取私钥和公钥

分别。public PrivateKey getPemPrivateKey(String filename, String algorithm) throws Exception {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int) f.length()];
dis.readFully(keyBytes);
dis.close();

String temp = new String(keyBytes);
String privKeyPEM = temp.replace("-----BEGIN PRIVATE KEY-----\n", "");
privKeyPEM = privKeyPEM.replace("-----END PRIVATE KEY-----", "");
//System.out.println("Private key\n"+privKeyPEM);

Base64 b64 = new Base64();
byte [] decoded = b64.decode(privKeyPEM);

PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(decoded);
KeyFactory kf = KeyFactory.getInstance(algorithm);
return kf.generatePrivate(spec);
}

public PublicKey getPemPublicKey(String filename, String algorithm) throws Exception {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int) f.length()];
dis.readFully(keyBytes);
dis.close();

String temp = new String(keyBytes);
String publicKeyPEM = temp.replace("-----BEGIN PUBLIC KEY-----\n", "");
publicKeyPEM = privKeyPEM.replace("-----END PUBLIC KEY-----", "");

Base64 b64 = new Base64();
byte [] decoded = b64.decode(publicKeyPEM);

X509EncodedKeySpec spec =
new X509EncodedKeySpec(decoded);
KeyFactory kf = KeyFactory.getInstance(algorithm);
return kf.generatePublic(spec);
}

『捌』 php 如何生成2048的私钥和1024的公钥长度

以下命令来生成密钥对。

$openssl genrsa -out mykey.pem 2048

$openssl pkcs8 -topk8 -inform PEM -outform PEM -in mykey.pem \
-out private_key.pem -nocrypt

这个命令得到的公共密钥。
$ openssl rsa -in mykey.pem -pubout -outform DER -out public_key.der

我写了两方法读取私钥和公钥

分别。public PrivateKey getPemPrivateKey(String filename, String algorithm) throws Exception {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int) f.length()];
dis.readFully(keyBytes);
dis.close();

String temp = new String(keyBytes);
String privKeyPEM = temp.replace("-----BEGIN PRIVATE KEY-----\n", "");
privKeyPEM = privKeyPEM.replace("-----END PRIVATE KEY-----", "");
//System.out.println("Private key\n"+privKeyPEM);

Base64 b64 = new Base64();
byte [] decoded = b64.decode(privKeyPEM);

PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(decoded);
KeyFactory kf = KeyFactory.getInstance(algorithm);
return kf.generatePrivate(spec);
}

public PublicKey getPemPublicKey(String filename, String algorithm) throws Exception {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int) f.length()];
dis.readFully(keyBytes);
dis.close();

String temp = new String(keyBytes);
String publicKeyPEM = temp.replace("-----BEGIN PUBLIC KEY-----\n", "");
publicKeyPEM = privKeyPEM.replace("-----END PUBLIC KEY-----", "");

Base64 b64 = new Base64();
byte [] decoded = b64.decode(publicKeyPEM);

X509EncodedKeySpec spec =
new X509EncodedKeySpec(decoded);
KeyFactory kf = KeyFactory.getInstance(algorithm);
return kf.generatePublic(spec);
}

热点内容
币印矿池余额怎么提现 发布:2025-07-16 00:23:47 浏览:492
币圈两千赚六十万 发布:2025-07-16 00:21:40 浏览:281
比特币每次顶部特征 发布:2025-07-16 00:12:23 浏览:967
币圈大佬谈趣分类 发布:2025-07-16 00:10:23 浏览:898
币圈观察区收益大吗 发布:2025-07-16 00:04:54 浏览:814
amigo区块链 发布:2025-07-15 23:42:00 浏览:731
区块链合伙人收入 发布:2025-07-15 23:36:31 浏览:814
比特币为什么要显卡挖 发布:2025-07-15 23:35:34 浏览:593
数字货币bpay 发布:2025-07-15 23:21:15 浏览:908
没有usdt怎么买呢 发布:2025-07-15 23:19:34 浏览:890