我已经生成了一个私钥:
openssl genrsa [-out file] –des3
Run Code Online (Sandbox Code Playgroud)
在此之后,我生成了一个公钥:
openssl rsa –pubout -in private.key [-out file]
Run Code Online (Sandbox Code Playgroud)
我想用我的私钥签署一些消息,并使用我的公钥验证其他一些消息,使用如下代码:
public String sign(String message) throws SignatureException{
try {
Signature sign = Signature.getInstance("SHA1withRSA");
sign.initSign(privateKey);
sign.update(message.getBytes("UTF-8"));
return new String(Base64.encodeBase64(sign.sign()),"UTF-8");
} catch (Exception ex) {
throw new SignatureException(ex);
}
}
public boolean verify(String message, String signature) throws SignatureException{
try {
Signature sign = Signature.getInstance("SHA1withRSA");
sign.initVerify(publicKey);
sign.update(message.getBytes("UTF-8"));
return sign.verify(Base64.decodeBase64(signature.getBytes("UTF-8")));
} catch (Exception ex) {
throw new SignatureException(ex);
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了将我的私钥转换为PKCS8格式并加载它的解决方案.它适用于这样的一些代码:
public PrivateKey getPrivateKey(String filename) throws Exception {
File f …Run Code Online (Sandbox Code Playgroud) 我有一个私钥文件(PEM BASE64编码).我想用它来解密一些其他数据.使用Java我试图读取文件并解码其中的BASE64编码数据...这是我试过的代码片段....
import java.io.*;
import java.nio.ByteBuffer;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import com.ibm.crypto.fips.provider.RSAPrivateKey;
import com.ibm.misc.BASE64Decoder;
public class GetPrivateKey {
public static RSAPrivateKey get() throws Exception {
File privateKeyFile = new File("privatekey.key");
byte[] encodedKey = new byte[(int) privateKeyFile.length()];
new FileInputStream(privateKeyFile).read(encodedKey);
ByteBuffer keyBytes = new BASE64Decoder().decodeBufferToByteBuffer(encodedKey.toString());
PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(keyBytes.array());
KeyFactory kf = KeyFactory.getInstance("RSA", "IBMJCEFIPS");
RSAPrivateKey pk = (RSAPrivateKey) kf.generatePrivate(privateKeySpec);
return pk;
}
public static void main(String[] args) throws Exception {
PrivateKey privKey = FormatMePlease.get();
System.out.println(privKey.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Exception in thread …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种在Java中以编程方式创建ssh兼容的id_rsa和id_rsa.pub文件的方法.
我创建了KeyPair:
KeyPairGenerator generator;
generator = KeyPairGenerator.getInstance("RSA");
// or: generator = KeyPairGenerator.getInstance("DSA");
generator.initialize(2048);
keyPair = generator.genKeyPair();
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何在KeyPair中创建PrivateKey和PublicKey的String表示.
如何使用系统authorized_keys文件中的条目进行java.security.PublicKey实现?我特别想要将authorized_keys文件中的公钥与Apache SSHD PublickeyAuthenticator界面中提供的公钥进行比较.
我正在做publicKey.getEncoded(),然后在前面添加"ssh-rsa",然后对其进行base64编码.然后我添加SSH2页眉/页脚.但它不会解码......
有没有办法以编程方式将Jsch生成的 SSH RSA 密钥转换为可用于加密的javax.crypto.Cipher格式?我大多看到过类似的答案:
openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key_file -nocrypt > pkcs8_key
Run Code Online (Sandbox Code Playgroud)
但我无法访问 openSSL 或 shell 命令。顺便说一句:我只使用 JDK6。
BigInteger感谢 @erickson 的帮助,我可以使用指数和模数作为传递给 a 的类型,KeyFactory将公钥从 RFC4716 转换为 Java 公钥RSAPublicKeySpec。他的解决方案如下。
现在我正在尝试转换私钥。privateJsch.key这是使用生成的示例writePrivateKey(str filename):
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC0ouLgTjmKjHU6UjNSL8HyTIdFM1UdVpgU81paWKreN8L36YoT
goZQHeyyUCCHmq3r3cKaySyu93mHBY0l76qSAIRZgE1IAFkBhNWBdlJ9UYA9HXm/
MqTQHbpqz0EYGE9TsFHS8dn1/utsJxKSWZ4xPNYjfS4Ps6G84iRwfdrIbQIDAQAB
AoGAKv3xnY1AqLcRV5Yk3NS9Blwsfc3f3iG0BJh+0q3zzPvcjYCp+kbAjOTyZuYn
N98asd6P6KMk3WfNJtOtanAGWl46bmtzNsQtSr5rVQEgs2w8i2yJcwVAYf2Td4qX
m3dH+roJA/CEFRSDat4sUfjOVmsYQXIBa0W2XTpp+7T1U4ECQQD1wSR6iTz7Bja0
MPcizDbRTRQHALBf7E8j8YOLpN/IGSox9pT+ktjsI2vMaD+b3SM4s0FD8quBlppE
o5FAguHxAkEAvCrCK7eZU3H+Ul1iw9Kd3WPHjDvQcdT5rEL+NSYEZyHgU7ipXEih
UHvK47Bkte/PVIu3jBFBnMujA0XiT0gSPQJBAI3+8j/nChgU6AjHfhRaIJZgzeCZ
8k8KcFPZWWOXeUHZ4HqL+lz5pmMSuFecKJy7cn1xfZVwIs62oR5l0CiRN1ECQCui
CqaSi3ZjH6M/znA0PbEhuxsUn7BVv5OncUUnzKuRmnAviO5CVU3Rdum3dJMPydcE
Ewri0YEnY2SV5vWVc80CQH43uBbshz7ju3DdVykHFrRElQB+f0YMK3Ad7eu+us0w
dLrOOoXP0T60B/bMTo8rdMa6XU/0w/w8FsOqoxNY23U=
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
使用openssl asn1parse -in privateJsch.key -out privateJsch.der产量:
$ openssl asn1parse …Run Code Online (Sandbox Code Playgroud) java ×6
openssh ×2
rsa ×2
security ×2
ssh ×2
certificate ×1
cryptography ×1
encryption ×1
openssl ×1
pkcs#8 ×1
public-key ×1
ssh-keys ×1
x509 ×1