我正在编写一个使用AWS Java API创建新的Amazon Web
Services服务器的工具。创建服务器时,您必须指定AWS随您的帐户存储的公共密钥中要使用的SSH密钥对。您可以自己生成密钥对并导入公钥,也可以让AWS生成密钥对并下载私钥。
我试图自己生成密钥对,将公钥导入AWS,使用新注册的密钥对条目启动新服务器,并将私钥保存在本地。然后,我想使用Putty使用私钥将ssh切换到新服务器中,可能先将其传递给Puttygen进行转换。
到目前为止,我已经完成了生成密钥对,将公钥成功导入到AWS并启动新服务器的工作。但是,我似乎一生无法以Putty或Puttygen可接受的任何格式导出私钥。
这是生成密钥对并保存私钥的代码:
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
random.nextBytes(new byte[]{}); //toss out the first result to ensure it seeds randomly from the system.
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(KEY_LENGTH, random);
KeyPair keyPair = keyGen.genKeyPair();
BASE64Encoder encoder = new BASE64Encoder();
FileOutputStream out = null;
File keyPath = new File(_keyStorageDir, "private.pem");
try
{
out = new FileOutputStream(keyPath);
out.write(encoder.encode(keyPair.getPrivate().getEncoded()).getBytes());
}
finally
{
if(out != null)
out.close();
}
但是,当我尝试在PuttyGen中导入密钥时,得到“无法加载密钥(不是私钥)”。如果我尝试添加----- BEGIN PRIVATE KEY
-----及其对应的页脚,则会收到“无法加载私钥(无法识别的密钥类型)的信息。如果尝试RSA PRIVATE
KEY,则会得到“无法加载私钥的信息”密钥(ASN.1解码失败)”。
调用将keyPair.getPrivate().getFormat()
产生“
PKCS#8”。虽然我找到了使用OpenSSL工具从该格式转换为pem格式的参考,但是我自己却没有在Java中找到如何实际操作的任何信息。
如何导出pem格式的密钥,以便Puttygen可以读取它?
啊哈!
诀窍是使用Bouncycastle的pem处理类。这是一个工作示例:
import org.bouncycastle.openssl.jcajce.JcaPEMWriter;
import java.io.File;
import java.io.FileWriter;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
public class Main
{
public static final int KEY_LENGTH = 2048;
public static void main(String[] args) throws Exception
{
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
random.nextBytes(new byte[]{}); //toss out the first result to ensure it seeds randomly from the system.
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(KEY_LENGTH, random);
java.security.KeyPair keyPair = keyGen.genKeyPair();
System.out.println("public format: " + keyPair.getPublic().getFormat());
System.out.println("public algorithm: " + keyPair.getPublic().getAlgorithm());
System.out.println("private format: " + keyPair.getPrivate().getFormat());
System.out.println("private algorithm: " + keyPair.getPrivate().getAlgorithm());
JcaPEMWriter writer = null;
File keyDir = new File("C:/misc/test_key");
try
{
writer = new JcaPEMWriter(new FileWriter(new File(keyDir, "private_bc.pem")));
writer.writeObject(keyPair.getPrivate());
}
finally
{
if(writer != null)
writer.close();
}
}
}
Puttygen无需投诉即可打开生成的私钥!
问题内容: 我有PEM格式+ PKCS#1(我想)的RSA公钥: 我想在Python中获取其ASN1编码版本的SHA1摘要。第一步应该是读取此密钥,但是我在PyCrypto中无法做到这一点: PyCrypto的文档说支持PEM + PKCS#1,所以我很困惑。我也尝试过M2Crypto,但事实证明M2Crypto不支持PKCS#1,而仅支持X.509。 问题答案: PyCrypto支持 PKCS#
问题内容: 以下代码获取结果,该结果适用于PDF和XLSX。对于HTML,会引发异常。 HTML的例外情况是 : 对于v6.0和v5.6,该错误相同。这曾经在v5.0中可用(某些类在v5.6中已弃用)。 如何导出各种格式的报告,包括HTML? 问题答案: 对于HTML和其他格式: 使用以下命令调用它:
另外,如果我想从这些字符串中创建新的公理,该怎么做呢?(将axiom转换为可读字符串,然后将可读字符串转换回axiom)
我有十六进制格式的私钥: 308204BC020100300D06092A864886F70D0101010500048204A6308204A20201000282010100B3B6F5AB13FCDECC12438581E90302E12BCF14570B49DCA2BF40957B79B10630DE20CB18B21D7393AC54FBA9D236F09235C4AF4D8E9227B
问题内容: 我有一堆不是UTF-8编码的文件,我正在将网站转换为UTF-8编码。 我对要保存在utf-8中的文件使用了简单的脚本,但是文件以旧编码保存: 如何以utf-8编码保存文件? 问题答案: file_get_contents / file_put_contents不会神奇地转换编码。 您必须显式转换字符串。例如使用或。 尝试这个: 或者,使用PHP的流过滤器:
我已经在服务器上配置了HSM,现在使用下面的示例代码解密数据 它第一次运行,第二次显示错误 私钥必须是RSAPrivate(Crt)密钥的实例或有PKCS#8编码