Tag: rsa

试图了解Java RSA密钥大小

钥匙发生器的尺寸为1024,那么为什么印刷尺寸为635和162? import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; public class TEST { public static KeyPair generateKeyPair() throws NoSuchAlgorithmException, NoSuchProviderException { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(“RSA”, “BC”); keyPairGenerator.initialize(1024); return keyPairGenerator.generateKeyPair(); } public static void main(String[] args) throws Exception { KeyPair keyPair = generateKeyPair(); RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); RSAPublicKey publicKey = (RSAPublicKey) […]

BadPaddingException:解密错误

我正在编写一个程序,它从控制台输入 – 一个zip文件的名称,一个zip文件的名称,包含从第一个zip生成的(de / en)加密文件和一个包含公钥的文件。 解密时我得到exception: exception Exception in thread “main” javax.crypto.BadPaddingException: Decryption error at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:380) at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:291) at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:363) at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389) at javax.crypto.Cipher.doFinal(Cipher.java:2165) at com.Main.decrypt(Main.java:67) at com.Main.main(Main.java:201) 无法弄清楚为什么我得到这个例外? 公钥: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCE3pA746UfpC8sFk8ZJp0yupyJqj5jy6cjdxUYoP7mCm7c0mqQDeCcDNBYW2eSozCioPrH/9L+CDQEPLYakoem+jFnUKDH5+pru/0PJTJJF8Xh/ZT9eJlvsYBr1/qSfICf6RTs7kzwq9IuSZBw7/tfNEF9i0A8FVox6HOopXod1QIDAQAB 私钥: MIICXQIBAAKBgQCE3pA746UfpC8sFk8ZJp0yupyJqj5jy6cjdxUYoP7mCm7c0mqQDeCcDNBYW2eSozCioPrH/9L+CDQEPLYakoem+jFnUKDH5+pru/0PJTJJF8Xh/ZT9eJlvsYBr1/qSfICf6RTs7kzwq9IuSZBw7/tfNEF9i0A8FVox6HOopXod1QIDAQABAoGANOFrYBqK5lvu1koOswDWQZFZqcSSzh8IZyoGwGWa7S0r0EECXlDXmuPSq8e9IfRG8ALHrH+ZlrbnFOSgyVSWHfpj3aH+qknoSX5TW2rMQHih8865xuqheMQ+RTZ7+BRDqNsYkzxB/Z8mqzpoJQSYf+H7nWxdDCgAJVYZzxl3DmUCQQD32iEjnwiwUjii8slcmvCEZl+z84DWNdvJOg6Z38sI4AvrfpKc1WAcDg1rNZCKrRgokh54wpLt08cpFcrD04c3AkEAiTzDmc0bdgfg5wj6xHFZpYlBwiGm/bjOR2PS57P0GNU5PsDllRbFqIuzArITutO5lvZZImzuYz7Lf+cQ73pxUwJBAOdEwmdaneDo17A0m2+to3/nhqWDMVSwLMU3RyiNigZeCMFU+bkd4PBMrHi9IoJDwacZsRU9eZwxYEUV8H2Jg0ECQEEkOqRSm2pXKwX/WSjNtQPCNxhy6NUeV6vDUmTxIjh3XYjP/ynZeVEbnoj1BjB0N2/U11Jj6nPpZqb7gyppMEkCQQCoGdVYDipU+hMMnvxa0zOIyQc/a+HE0lESqn+2ZPafYi9Z1RldRMvUXhP8U7s+OuhRwprdw2ivvOFrnWyz9lL2 该程序的代码如下。 任何帮助都很受欢迎:) package com; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.security.GeneralSecurityException; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.PublicKey; […]

分解RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING

所以Java有一个名为RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING 。 那有什么意思? RFC3447 , 公钥加密标准(PKCS)#1:RSA加密规范版本2.1 ,第7.1.2节解密操作说Hash和MGF都是RSAES-OAEP-DECRYPT的选项。 MGF是它自己的function,在B.2.1节MGF1中定义,并且它也有自己的Hash“选项”。 也许RSAES-OAEP-DECRYPT和MGF1中的Hash“选项”应该是相同的,或者它们可能不是,我不清楚。 如果他们是那么我猜你有RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING这意味着sha256应该用于两者。 但如果它们不应该是相同的那么你可以将sha256用于RSAES-OAEP-DECRYPT,例如,sha1用于MGF1。 如果是这种情况那么sha256应该用于什么function呢? 什么哈希算法应该用于其他function? 欧洲央行在这方面的意义是什么? ECB是对称分组密码模式。 电子密码本。 也许它应该意味着Java如何处理比模数更大的明文? 就像将明文拆分成与模数一样大的块,然后用RSA加密每个块并将它们连接在一起? 我猜…

使用Java中的RSA私钥加密

我正在尝试使用RSA私钥加密某些内容。 我正在关注这个例子: http : //www.junkheap.net/content/public_key_encryption_java 但转换它使用私钥而不是公共。 在这个例子之后,我认为我需要做的是: 读入DER格式的私钥 生成PCKS8EncodedKeySpec 从KeyFactory调用generatePrivate()来获取私钥对象 将该私钥对象与Cipher对象一起使用以进行加密 那么,步骤: 密钥是从openssl生成的: openssl genrsa -aes256 -out private.pem 2048 然后转换为DER格式: openssl rsa -in private.pem -outform DER -out private.der 我用以下代码生成PKCS8EncodedKeySpec: byte[] encodedKey = new byte[(int)inputKeyFile.length()]; try { new FileInputStream(inputKeyFile).read(encodedKey); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // […]

将.Net RSA xml密钥移植到Java

我有来自.Net系统的私有和公共密钥,采用xml格式。 我必须使用此密钥在Java中执行加密/解密。 有什么办法吗? 公钥看起来像这样: jHIxcGzzpByFv…pvhxFnP0ssmlBfMALis AQAB 私钥: 4hjg1ibWXHIlH…ssmlBfMAListzrgk= AQAB 8QZCtrmJcr9uW7VRex+diH…jLHV5StmuBs1+vZZAQ== 8CUvJTv…yeDszMWNCQ== elh2Nv…cygE3657AQ== MBUh5XC…+PfiMfX0EQ== oxvsj4WCbQ….LyjggXg== KrhmqzAVasx…uxQ5VGZmZ6yOAE= 我已经编写了一些代码来加密数据,但我不确定它是否正确。 Element modulusElem = root.getChild(“Modulus”); Element exponentElem = root.getChild(“Exponent”); byte[] expBytes = decoder.decodeBuffer(exponentElem.getText().trim()); byte[] modBytes = decoder.decodeBuffer(modulusElem.getText().trim()); RSAPublicKeySpec keySpec = new RSAPublicKeySpec(new BigInteger(1, modBytes), new BigInteger(1, expBytes)); KeyFactory fact = KeyFactory.getInstance(“RSA”); PublicKey pubKey = fact.generatePublic(keySpec); 如何从xml创建私钥来解密数据?

在Java中格式化OpenSSL的RSA密钥

背景 使用命令在Linux上使用OpenSSL生成RSA密钥, openssl genrsa -out mykey.pem 1024 创建了以下内容: “—–BEGIN RSA PRIVATE KEY—– MIICXQIBAAKBgQChs9Fepy5FgeL0gNJ8GHcKRHsYnM2Kkw19zwydDQNyh2hrHWV2 B11wpLFp8d0imcl2Wjb0oV/AxOhb3unQgNzs66LVuXJwS8icp3oIJZtExs6tkxzE s5mnU68wMeCYtJqHIZOmNblVWvpJMLNAwAVi3oLfnzDDbzjnDapm8M21nQIDAQAB AoGAZ11P1+acUHgvwMXcRtFIvvp5iYkqZouL00EYOghIjNx75gTbh7A7jbbpZeTi y6xsuMgAWy4QzGPSeG+tHMhS7+dYQNPuKSv5KtK3V7ubXz/I3ZN1etRVecA56QNw 7HKv6b7srolt08kogGIwpbbfl/mhfJHnv4Jeqd5lNMnK4e0CQQDWFZo4h22OlSaH ZGd3i4rwLrA0Ux5bkdh7YH0uEeE/nGzpVs1DPhsN8UCyq9LAiKYLlXeeCvwurKwo OgKlUCkzAkEAwVy2KignoRInFTAaYH8PQRfD835q+oC0Iu21BF68ne06U6wu+wWk bWiYxTOOb+TGZfA1vA6OAvGVGoXs1bHF7wJBAItGiop0MKYuCl7Sxy1SrxUKir+/ w2Q3QesiHs41+6Byl7hGLEuuv9MWPM0AU5/GRqAKoUNESkPjOi0BcG8z81kCQGGn OvCreugjzM0skAWv5bpQEExGyixdF5yURFlCpytzBYQAb3Gi9dmze4QMd6EW/wO4 fsrM5vehnlXY0TVTJM0CQQCMPVhub8LSo7T/lCzypvb/cgxJfyITRKcM2asrXud5 r27kbzsXqYum4huHqyFkb3pZammsYA/z89HchylfrD4U —–END RSA PRIVATE KEY—–” Java 6下的以下代码, KeyPairGenerator keyGen = null; try { keyGen = KeyPairGenerator.getInstance(“RSA”); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } KeyPair pair = keyGen.generateKeyPair(); privateKey = […]

在建立安全连接时,没有共同的密码套件

我正在尝试在两个Java项目之间建立安全连接,但我遇到了SSLHandshakeException(没有共同的密码套件)。 这是在两侧创建套接字的方法: 客户: private SSLSocket getSocketConnection() throws SSLConnectionException { try { /* Load properties */ String keystore = properties.getProperty(“controller.keystore”); String passphrase = properties.getProperty(“controller.passphrase”); String host = properties.getProperty(“controller.host”); int port = Integer.parseInt(properties .getProperty(“controller.port”)); /* Create keystore */ KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyStore.load(new FileInputStream(keystore), passphrase.toCharArray()); /* Get factory for the given keystore */ TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); […]

如何用java中的RSA密钥加密解密

我需要用openssl生成的rsaprivatekey.pem和rsapublickey.pem密钥替换从Unix到java代码的加密和解密步骤 我生成了密钥 openssl genrsa -out /tmp/rsaprivatekey.pem -des3 1024 openssl rsa -in /tmp/rsaprivatekey.pem -pubout -out /tmp/rsapublickey.pem 我在unix中使用键(我需要在java中执行) echo “Text to encript”| openssl rsautl -encrypt -inkey /tmp/rsapublickey.pem -pubin -out out.enc openssl rsautl -decrypt -inkey /tmp/rsaprivatekey.pem -in out.enc 这是我尝试这样做的 public static void main(String[] args) { Base64 base64 = new Base64(); String TextStream = “this is the input text”; […]

使用RSA在java中加密和解密大字符串

我正在尝试实施PKI。 我想在java中使用RSA加密大字符串,而不使用充气城堡。 我得到的问题是数据不能超过117个字节。 我试图找到我失败的解决方案。 我是这个加密的新手。 请以大字符串为例帮我解释一下。

使用Java生成PKCS#1格式的RSA密钥

当我使用Java API生成RSA密钥对时,公钥以X.509格式编码,私钥以PKCS#8格式编码。 我希望将它们编码为PKCS#1。 这可能吗? 我花了相当多的时间浏览Java文档,但还没有找到解决方案。 当我使用Java和Bouncy Castle提供程序时,结果是一样的。 以下是代码片段: KeyPairGenerator keygen = KeyPairGenerator.getInstance(“RSA”,”BC”); keygen.initialize(1024); KeyPair pair = keygen.generateKeyPair(); PrivateKey priv = pair.getPrivate(); PublicKey pub = pair.getPublic(); byte[] privBytes = priv.getEncoded(); byte[] pubBytes = pub.getEncoded(); 两个结果字节数组的格式为X.509(公共)和PKCS#8(私有)。 任何帮助将非常感激。 有一些类似的post,但没有一个真正回答我的问题。 谢谢