为什么需要找回公钥呢?因为干了一件蠢事,因为ssh登陆服务器懒得输入密码,就准备把本机公钥 ~/ssh/id_rsapub 添加到服务器的授权密钥 ~/ssh/authorized_keys 里去,结果因为是临时随便搜的方法,拷贝的时候用的这个命令: scp ~/ssh/id_rsapub 登录用户名@服务器域名:~/ssh/ ,按下回车我就后悔了,这不是把服务器的公钥覆盖了么。赶紧测试一下是不是这样,比如 Github 一般都是设置ssh key登陆账号的,测试连接:
果然出事了。
意外的简单:
注意这样生成的公钥是没有注释的,一般在后面补上 空格+用户名@主机名 更好。
之前我还在担心无法找回,毕竟记得rsa是个对称的加密算法,能从私钥找回公钥岂不是反向也可?
赶紧补补课,比较重要的点是这几个:
所以,光有公钥或私钥都是不能直接计算出对方的,而rsa加密初始计算完成后只需要保留公钥私钥。但是,本机上在文件 id_rsa 其实保存了私钥公钥和生成密钥时的其他所有数据,用
就能方便地查看,其中就有modulus,publicExponent,privateExponent,prime1,prime2等等,对应于n, e, d, p, q。而且通常来说公钥都是固定的一个数字65537 (0x10001),所以找回公钥非常方便。
个人网银中的CA证书是安全认证工具,能够更好地防范钓鱼网站等欺诈。
以上内容供您参考,业务规定请以实际为准。
如有疑问,欢迎咨询中国银行在线客服。
诚邀您下载使用中国银行手机银行APP或中银跨境GO APP办理相关业务。
公钥密码体制的核心思想是:加密和解密采用不同的密钥。这是公钥密码体制和传统的对称密码体制最大的区别。对于传统对称密码而言,密文的安全性完全依赖于 密钥的保密性,一旦密钥泄漏,将毫无保密性可言。但是公钥密码体制彻底改变了这一状况。在公钥密码体制中,公钥是公开的,只有私钥是需要保密的。知道公钥 和密码算法要推测出私钥在计算上是不可行的。这样,只要私钥是安全的,那么加密就是可信的。
显然,对称密码和公钥密码都需要保证密钥的安全,不同之处在于密钥的管理和分发上面。在对称密码中,必须要有一种可靠的手段将加密密钥(同时也是解密密 钥)告诉给解密方;而在公钥密码体制中,这是不需要的。解密方只需要保证自己的私钥的保密性即可,对于公钥,无论是对加密方而言还是对密码分析者而言都是 公开的,故无需考虑采用可靠的通道进行密码分发。这使得密钥管理和密钥分发的难度大大降低了。
加密和解密:发送方利用接收方的公钥对要发送的明文进行加密,接受方利用自己的
私钥进行解密,其中公钥和私钥匙相对的,任何一个作为公钥,则另一个
就为私钥但是因为非对称加密技术的速度比较慢,所以,一般采用对称
加密技术加密明文,然后用非对称加密技术加密对称密钥,即数字信封 技术
签名和验证:发送方用特殊的hash算法,由明文中产生固定长度的摘要,然后利用
自己的私钥对形成的摘要进行加密,这个过程就叫签名。接受方利用
发送方的公钥解密被加密的摘要得到结果A,然后对明文也进行hash ***
作产生摘要B最后,把A和B作比较。此方式既可以保证发送方的身份不
可抵赖,又可以保证数据在传输过程中不会被篡改。
首先要分清它们的概念:
加密和认证
首先我们需要区分加密和认证这两个基本概念。
加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容, 所以数据加密可以保护数据,防止监听攻击。其重点在于数据的安全性。身份认证是用来判断某个身份的真实性,确认身份后,系统才可以依不同的身份给予不同的 权限。其重点在于用户的真实性。两者的侧重点是不同的。
公钥和私钥
其次我们还要了解公钥和私钥的概念和作用。
在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是非对称密钥密码系统,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。
公钥私钥的原则:
一个公钥对应一个私钥。
密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。
如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。
如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。
非对称密钥密码的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的,下面我就详细讲解一下两者的区别。
事例说明下:
例如:比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:
Bob将他的公开密钥传送给Alice。
Alice用Bob的公开密钥加密她的消息,然后传送给Bob。
Bob用他的私人密钥解密Alice的消息。
那么Bob怎么可以辨认Alice是不是真人还是冒充的我们只要和上面的例子方法相反就可以了
Alice用她的私人密钥对文件加密,从而对文件签名。
Alice将签名的文件传送给Bob。
Bob用Alice的公钥解密文件,从而验证签名。
通过例子大家应该有所了解吧!
以下命令来生成密钥对。
$openssl genrsa -out mykeypem 2048
$openssl pkcs8 -topk8 -inform PEM -outform PEM -in mykeypem \
-out private_keypem -nocrypt
这个命令得到的公共密钥。
$ openssl rsa -in mykeypem -pubout -outform DER -out public_keyder
我写了两方法读取私钥和公钥
分别。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) flength()];
disreadFully(keyBytes);
disclose();
String temp = new String(keyBytes);
String privKeyPEM = tempreplace("-----BEGIN PRIVATE KEY-----\n", "");
privKeyPEM = privKeyPEMreplace("-----END PRIVATE KEY-----", "");
//Systemoutprintln("Private key\n"+privKeyPEM);
Base64 b64 = new Base64();
byte [] decoded = b64decode(privKeyPEM);
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(decoded);
KeyFactory kf = KeyFactorygetInstance(algorithm);
return kfgeneratePrivate(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) flength()];
disreadFully(keyBytes);
disclose();
String temp = new String(keyBytes);
String publicKeyPEM = tempreplace("-----BEGIN PUBLIC KEY-----\n", "");
publicKeyPEM = privKeyPEMreplace("-----END PUBLIC KEY-----", "");
Base64 b64 = new Base64();
byte [] decoded = b64decode(publicKeyPEM);
X509EncodedKeySpec spec =
new X509EncodedKeySpec(decoded);
KeyFactory kf = KeyFactorygetInstance(algorithm);
return kfgeneratePublic(spec);
}
以上就是关于如何找回ssh公钥全部的内容,包括:如何找回ssh公钥、中国银行CA证书有什么用、非对称加密中的公钥和私钥怎么来的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)