Tag: 私钥

将私钥作为字符串的Java SFTP客户端

Apache Commons和JSch都需要私钥文件来建立SFTP连接。 我正在处理的项目将用于连接多个SFTP服务器。 因此,我们不希望部署多个私钥文件,而是将这些密钥保存为加密配置文件中的字符串。 是否存在不需要私钥文件对象的SFTP库?

JSch从字符串中添加私钥

我将SFTP的密钥对文件的内容作为字符串。 我需要使用JSch添加内容,但addIdentity只接受文件路径。 无论如何我能做到吗? 我看到KeyPair类有一个方法 – KeyPair load(JSch jsch, byte[] bytes, byte[] bytes1) 我不确定这是做什么的。

Java:写入和读取基于密码的加密私钥

我试图从文件中读取基于密码的加密私钥,但我得到以下exception: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big. at sun.security.util.DerInputStream.getLength(DerInputStream.java:561) at sun.security.util.DerValue.init(DerValue.java:365) at sun.security.util.DerValue.(DerValue.java:294) at javax.crypto.EncryptedPrivateKeyInfo.(EncryptedPrivateKeyInfo.java:84) … 这是我加密和写入私钥的方式: public static void savePrivateKeyToDisk(PrivateKey privateKey, String passord){ try { // unencrypted PKCS#8 private key byte[] encodedPrivateKey = privateKey.getEncoded(); String MYPBEALG = “PBEWithSHA1AndDESede”; int count = 20; SecureRandom random = new SecureRandom(); byte[] salt = new byte[8]; random.nextBytes(salt); // Create […]

阅读Java中的私有加密密钥

我有以下代码: PEMParser pemParser; File telexuskeys = new File(locationKey); if(telexuskeys.exists()) pemParser = new PEMParser(new FileReader(telexuskeys)); else{ usage(ops); throw new FileNotFoundException(“The key file (company’s certificate) doesn’t exist!”); } System.out.println(“Loading company’s certificate”); Object object = pemParser.readObject(); Object object2 = pemParser.readObject(); PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build(passwordPem.toCharArray()); JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider(“BC”); byte[] keyBytes = PrivateKeyInfo.getInstance(object2).getEncoded(); PKCS8EncodedKeySpec spec = new […]

为一个别名加载Java KeyStore?

有谁知道是否可以加载KeyStore,以便它只提示给定别名的密码? 例: 在我的密钥库中,我有两个私钥:Alice的加密证书和Bob的加密证书。 当我加载我的密钥库时: keyStore = KeyStore.getInstance(“Windows-MY”, “SunMSCAPI”); keyStore.load(null); 我被提示输入Alice和Bob的密钥存储密码。 一旦输入,我可以使用getKey(“Alice’s Encryption Certificate”, null); 检索Alice的私钥。 我的密钥受Entrust的安全提供程序保护,它是在加载密钥库时提示我输入密码的人。 如果我没有输入Bob的密码并尝试获取他的密钥,它将返回null,这很好,但我想避免密码提示。 是否有可能以某种方式指定我在加载密钥存储区之前只需要Alice的密钥,这样我就不会被提示输入Bob的密码了? 谢谢。

RSA私钥仅支持RSAPrivate(Crt)KeySpec和PKCS8EncodedKeySpec

我按照链接中的步骤操作: 如何读取.pem文件以获取私钥和​​公钥 。 我执行了以下三个命令: 1. $openssl genrsa -out mykey.pem 2048 2. $openssl pkcs8 -topk8 -inform PEM -outform PEM -in mykey.pem -out private_key.pem -nocrypt 3. $ openssl rsa -in mykey.pem -pubout -outform DER -out public_key.der 这创建了三个文件,但是当我尝试通过Java代码读取这些文件时,我开始面临以下错误: PUBLIC KEY EXPO : 65537 Only RSAPrivate(Crt)KeySpec and PKCS8EncodedKeySpec supported for RSA private keys 我的代码供参考: public class PublicPrivateKeyDemo { private […]

使用DER格式从String base64编码创建PrivateKey和PublicKey

我在Base64中的String中有我的私钥和公钥,其中使用ANS1 DER进行编码。 我尝试创建java PrivateKey和PublicKey的实例: byte [] llave2 = DatatypeConverter.parseBase64Binary(key); PKCS8Key pkcs8 = new PKCS8Key( llave2, password.toCharArray()); //line 2 llave2 = pkcs8.getDecryptedBytes(); //line 3 certificado = DatatypeConverter.parseBase64Binary(cer); KeyFactory kf = KeyFactory.getInstance(“RSA”); PKCS8EncodedKeySpec ks = new PKCS8EncodedKeySpec(llave2); PrivateKey privateKey = kf.generatePrivate(ks); X509EncodedKeySpec x = new X509EncodedKeySpec(certificado); PublicKey publicKey = kf.generatePublic(x); 我在PublicKey publicKey = kf.generatePublic(x)收到以下错误。 java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: […]

读取DER格式java中的私钥

我有以下代码来读取PKCS#8格式的私钥 public void encryptHash(String hashToEncrypt, String pathOfKey, String Algorithm) { FileInputStream fis = null; byte[] encodedKey = null; try { File f = new File(pathOfKey); encodedKey = new byte[(int)f.length()]; fis = new FileInputStream(f); fis.read(encodedKey); fis.close(); KeyFactory kf = KeyFactory.getInstance(“RSA”); PrivateKey privateKey = kf.generatePrivate(new PKCS8EncodedKeySpec(encodedKey)); Signature rsaSigner = Signature.getInstance(“SHA1withRSA”); rsaSigner.initSign(privateKey); fis = new FileInputStream(hashToEncrypt); BufferedInputStream bis […]

使用类路径中的.p12文件进行GoogleCredential

我正在制作一个java命令行应用程序,该应用程序打包在一个使用某些Google API的JAR文件中。 我需要从私钥“Credentials.p12”设置GoogleCredential对象。 GoogleCredential credential = new GoogleCredential.Builder() .setTransport(httpTransport) .setJsonFactory(jsonFactory) .setServiceAccountId(“xxxxx@developer.gserviceaccount.com”) .setServiceAccountScopes(Arrays.asList(DirectoryScopes.ADMIN_DIRECTORY_GROUP, DirectoryScopes.ADMIN_DIRECTORY_USER, DirectoryScopes.ADMIN_DIRECTORY_ORGUNIT)) .setServiceAccountUser(emailAccount) //THE CODE BELOW IS IMPORTANT: I need to change this .setServiceAccountPrivateKeyFromP12File(new File(“Credentials.p12”)) .build(); directory = new Directory.Builder(httpTransport, jsonFactory, credential) .setApplicationName(“My Cmd App”) .build(); 现在我能够使它工作,但文件“Credentials.p12”位于打包的JAR文件之外。 如何使用JAR内部的p12文件使其工作? 从这个文档中 ,我认为我可以使用的唯一其他替代方法是使用PrivateKey对象的方法变体。 我正在考虑使用InputStream从类路径中获取p12文件: InputStream is = this.getClass().getResourceAsStream(“Credentials.p12”); 我完全不知道该怎么做。 在您回答之前,请确保您有使用Google OAuth2库的经验。 并且,请不要将资源复制到临时文件中:如果出于某种原因,Credential.p12的单数版本应该保留在JAR中。

在Java中从私有获取公钥

我记得很久以前用OpenSSL这么做了,但我想知道它是否可能以及如何,我从来没有在java上使用过Cryptography。