使用下例中ssky-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linux主机。
ssh-copy-id 把本地主机的公钥复制到远程主机的authorized_keys文件上。
ssh-copy-id 也会给远程主机的用户主目录(home)和~/ssh, 和~/ssh/authorized_keys设置合适的权限 。
步骤1: 用 ssh-key-gen 在本地主机上创建公钥和密钥
ligh@local-host$ ssh-keygen -t rsa
Enter file in which to save the key (/home/jsmith/ssh/id_rsa):[Enter key]
Enter passphrase (empty for no passphrase): [Press enter key]
Enter same passphrase again: [Pess enter key]
Your identification has been saved in /home/jsmith/ssh/id_rsa
Your public key has been saved in /home/jsmith/ssh/id_rsapub
The key fingerprint is: 33:b3:fe:af:95:95:18:11:31:d5:de:96:2f:f2:35:f9
ligh@local-host
步骤2: 用 ssh-copy-id 把公钥复制到远程主机上
ligh@local-host$ ssh-copy-id -i ~/ssh/id_rsapub root@19216803
ligh@remote-host‘s password:
Now try logging into the machine, with ―ssh remote-host‘‖, and check in:
ssh/authorized_keys to make sure we haven‘t added extra keys that you weren‘t expecting
[注: ssh-copy-id 把密钥追加到远程主机的 ssh/authorized_key 上]
步骤3: 直接登录远程主机
ligh@local-host$ ssh remote-host
Last login: Sun Nov 16 17:22:33 2008 from 19216812
[注: SSH 不会询问密码]
ligh@remote-host$
[注: 你现在已经登录到了远程主机上
RSA公钥密码
RSA公钥密码是1977年由Ron Rivest、Adi Shamirh和LenAdleman在MIT(美国麻省理工学院〉开发的,1978年首次公布[RIVE78]。它是目前最有影响的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击。目前它已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想分解它们的乘积却极端困难,因此可以将乘积公开作为加密密钥。
RSA的算法结构相当简单,整个算法可以描述如下:
(1)选取两个大素数p和q(保密);
(2)计算n=pq(公开),γ=(p一1〉(q-1)(保密);
(3)随机选取整数e(公开,加密密钥),使得ed(ear)=1
(4)计算d(保密,私人密钥),使得ed≡1(mod r),即d=e-1(mod r);
(5)加密:c=me mod n
(6)解密:m=cd mod n。
利用RSA对被加密的信息m (长度小于log2n的整数)进行加密得到相应的密文c=me mod n;解密算法则是计算m=cd modn RSA的优点是不需要密钥分配,但缺点是速度慢。RSA公钥密码 RSA 公钥 密码
crypto API支持常用的rsa、aes加解密,这边介绍rsa的应用。
windowcrypto需要chrome 37版本,ie 11,safari 11才支持全部API而基本的加解密在safari 7就可以。
cryptosubtlegenerateKey(algorithm, extractable, keyUsages) ,其中:
1 algorithm 参数根据不同算法填入对应的参数对,rsa需要填入 RsaHashedKeyGenParams 对象包含有:
2 extractable 一般是true,表示是否允许以文本的方式导出key
3 keyUsages 是一个数组,里面可选 encrypt , decrypt , sign 等
函数结果返回一个promise对象,如果是对称加密会得到一个密钥 CryptoKey 类型,这边rsa会得到一个密钥对 CryptoKeyPair ,它有2个 CryptoKey 成员, privateKey 和 publicKey ,我们导出密钥为文本或者加解密都将通过这2个成员对象。
windowcryptosubtleexportKey(format, key) ,其中:
1 format 可选 raw , pkcs8 , spki , jwk ,我们这边在导出公钥时选 spki ,私钥选 pkcs8
2 key 就是上面 CryptoKeyPair 的 privateKey 或者 publicKey
函数返回一个promise对象,结果是一个ArrayBuffer,这边转成pem风格。
windowcryptosubtleimportKey(
format,
keyData,
algorithm,
extractable,
keyUsages
) ,其中:
1 format 可选 raw , pkcs8 , spki , jwk ,对应之前生成时的选择,我们这边在导入公钥时选 spki ,私钥选 pkcs8 。
2 keyData ,即 windowcryptosubtleexportKey 获得的ArrayBuffer,由于在这里时我们一般只有pem文本的,所以还需要做转换成ArrayBuffer。
3 algorithm 这边我们是rsa,需要填入一个 RsaHashedImportParams 对象,这边对应 cryptosubtlegenerateKey 所需的 RsaHashedKeyGenParams 对象,含有:
4 extractable 同 cryptosubtlegenerateKey 的
5 keyUsages 同 cryptosubtlegenerateKey
函数返回一个promise对象,结果是一个 CryptoKey 。
加密 cryptosubtleencrypt(algorithm, key, data) ,其中:
1 algorithm ,加解密只支持RSA-OAEP不支持RSAES-PKCS1-v1_5
2 key 即公钥的 CryptoKey 对象
3 data 是一个 BufferSource 对象,不能直接是要加密的字符串。
结果是一个ArrayBuffer,可以使用windowbtoa(StringfromCharCode(new Uint8Array(e)))输出为base64字符串
解密 cryptosubtledecrypt(algorithm, key, data) ,基本同加密,这边data对应为加密返回的ArrayBuffer,如果是base64字符串比如从后端加密过来的,就需要转为Uint8Array。
返回值同加密
import rsa rsaPublickey = int(pubkey, 16) key = rsaPublicKey(rsaPublickey, 65537) #创建公钥 message = str(servertime) + '\t' + str(nonce) + '\n' + str(password) #拼接明文js加密文件中得到 passwd = rsaencrypt(message, key) #加密 passwd = binasciib2a_hex(passwd) #将加密信息转换为16进制。 return passwd
p=43
q=17
n=731
e1=593
e2=17
我是从1开始一个一个地试的
节选
>
在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的。
公钥用来给数据加密,用公钥加密的数据只能使用私钥解密
用来解密公钥加密的数据。
对需要传输的文本,做一个HASH计算,一般采用SHA1,SHA2来获得
使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。
数据接收端,拿到传输文本,但是需要确认该文本是否就是发送发出的内容,中途是否曾经被篡改。因此拿自己持有的公钥对签名进行解密(密钥对中的一种密钥加密的数据必定能使用另一种密钥解密。),得到了文本的摘要,然后使用与发送方同样的HASH算法计算摘要值,再与解密得到的摘要做对比,发现二者完全一致,则说明文本没有被篡改过。
是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击。其重点在于数据的安全性。
公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:
1、客户端生成RSA公钥和私钥
2、客户端将自己的公钥存放到服务器
3、客户端请求连接服务器,服务器将一个随机字符串加密后发送给客户端
4、客户端根据自己的私钥解密这个随机字符串之后再发送给服务器
5、服务器接受到字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。
进入用户目录下ssh目录:
id_rsa:私钥文件
id_rsapub:公钥文件
authorized_keys: 保存其他公钥的的文件
known_hosts: 已经建立过连接的服务器信息,可以清空。
1执行命令:
此时会重新生成id_rsa私钥文件和id_rsapub公钥文件
用户将公钥发送给其他服务器,其他服务器将接受的公钥保存在authorized_keys里面。持有私钥的用户就可以登录服务器(authorized_keys存放自己的公钥,用户便可以使用私钥从其他的地方登录服务器)。
2将公钥导入到vps
3修改SSHD的配置文件/etc/ssh/sshd_config
4重启SSH后进行测试
常见的公钥密码算法有rsa算法。常见的公钥加密算法有:RSA、ElGamal、背包算法、Rabin(RSA的特例)、迪菲-赫尔曼密钥交换协议中的公钥加密算法、椭圆曲线加密算法(EllipticCurveCryptography,ECC),DSA数字签名(又称公钥数字签名),将摘要信息用发送者的私钥加密,接收者用发送者的公钥才能解密被加密的摘要信息,也属于公开密钥加密算法。
以上就是关于RSA KEY获取失败怎么办全部的内容,包括:RSA KEY获取失败怎么办、什么是RSA公钥密码、前端RSA密钥生成和加解密window.crypto等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)