Tag: rsa

Java RSA加密 – 解密.NET

我正在使用RSA加密JAVA并尝试使用.NET进行解密。 我包含了我的JAVA代码和.NET代码,希望有人有这方面的经验。 JAVA代码: byte[] modulusBytes = Base64.decode(“xTSiS4+I/x9awUXcF66Ffw7tracsQfGCn6g6k/hGkLquHYMFTCYk4mOB5NwLwqczwvl8HkQfDShGcvrm47XHKUzA8iadWdA5n4toBECzRxiCWCHm1KEg59LUD3fxTG5ogGiNxDj9wSguCIzFdUxBYq5ot2J4iLgGu0qShml5vwk=”); byte[] exponentBytes = Base64.decode(“AQAB”); BigInteger modulus = new BigInteger(1, modulusBytes ); BigInteger exponent = new BigInteger(1, exponentBytes); RSAPublicKeySpec rsaPubKey = new RSAPublicKeySpec(modulus, exponent); KeyFactory fact = KeyFactory.getInstance(“RSA”); PublicKey pubKey = fact.generatePublic(rsaPubKey); Cipher cipher = Cipher.getInstance(“RSA”); cipher.init(Cipher.ENCRYPT_MODE, pubKey); byte[] plainBytes = new String(“big kitty dancing”).getBytes(“UTF-8”); byte[] cipherData = cipher.doFinal( […]

在Java中将RSA密钥对象导出为XML

我在Java中成功运行RSA加密/解密。 这就是我生成密钥的方式。 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(path)); KeyPairGenerator kpg = KeyPairGenerator.getInstance(“RSA”); kpg.initialize(1024); KeyPair keypair = kpg.generateKeyPair(); oos.writeObject(keypair); 但现在我需要将我的系统与.Net代码集成。 是否可以按以下格式将此KeyPair对象导出为XML(因为.Net代码只能接受XML格式的密钥): ….. …… ….. …. ……. …… ……… ……..

解密用RSA java加密的“长”消息

嗨这是同一个问题,两年前被问过: Java / JCE:解密用RSA加密的“长”消息 我有一个大字节数组和rsa密钥对,由值1024启动。使用rsa加密和密钥的指定大小是强烈要求,我无法更改它。 所以我不能使用非对称加密对称密钥进行对称加密。 我不能使用任何其他键。 我有一个字节数组,需要返回加密的字节数组。 我想知道是否有任何现成的工具可以解决这个问题? 抱歉这样一个业余的问题,但我真的需要帮助。

Android / JVM在RSA解密方面的差异

我试图解密一个字符串,我已在其他地方加密。 这是我的代码: private void test() { try { String stringMessage=”Sf3O7Lr2+WN5szGyLejL3CjuBRZtQ72+ZBmgVTgWnatQZxUElzaBqFa1p0SVBqe9VWVxCxdEkejMVtDGEr0UJSVSK8EB/fPI6v8JE8dIu0JN0mMs4xlowhITy0tQR+1pcBtDFjzOl33xxQcq5JuPezxRDxFIp+IVkD8FdpqlttEKf2Tvqw9tqsdgiBKb5xDvKrkIDQXdLBh1gbAVZDSJYGHRkcOA8vz2ty/PeooKkfDK6IOn7KBwOBgSRgQr/MLBF3Xk2vRWgVGRh/fRkzu21EWo99Q5moWKxWl3HW/bbgTBQTb097XP3NTID9kSPhCfL0BEfBxonuNse5GBoeRnCw==”; //Convert String back to Byte[] and decrpt byte[] byteMessage = Base64.decodeBase64(stringMessage.getBytes(“UTF-8”)); System.out.println(“ENCRYPTED MESSAGE byte Length: “+byteMessage.length); String decryptedMsg = decryptString(byteMessage, loadCASPrivateKey()); System.out.println(decryptedMsg); } catch (Exception e) { e.printStackTrace(); return; } } private static String decryptString(byte[] message, Key privateKey) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException […]

使用Bouncy Castle的C#RSA解密

我得到了一个Base64编码加密字符串,它使用Bouncy Castle在Java中加密。 下面的示例Java代码段: Cipher cipher = Cipher.getInstance(“RSA/ECB/PKCS1Padding”); cipher.init(Cipher.ENCRYPT_MODE, key.getPublic()); byte[] encryptedText = cipher.doFinal(“xxxxx|xxxxx”.getBytes(“UTF-8”)); String encodedText = new BASE64Encoder().encode(encryptedText); 我需要使用Bouncy Castle解密生成的字符串,但是在C#中,我已经获得了关于如何在Java中执行此操作的代码片段,但我无法将其转换为C#(原因是我们正在构建.net站点,以及将成为Java站点中的iFrame.Java站点将把RSA加密字符串传递给.NET站点。 下面解密的示例Java代码: Cipher cipherDec = Cipher.getInstance(“RSA/ECB/PKCS1Padding”); cipherDec.init(Cipher.DECRYPT_MODE, key.getPrivate()); byte[] decodedText = new BASE64Decoder().decodeBuffer(encodedText); byte[] decryptedText = cipherDec.doFinal(decodedText); String finalValue = new String(decryptedText, “UTF-8”); 我从http://www.bouncycastle.org/csharp/下载了示例,但似乎没有输入字符串值来加密的示例,然后它通过加密/解密过程。 我已经给出了模数 , 公共指数 , 私有指数 , 素数P , 素数q , 素数指数p , […]

在Java中加载RSA私钥(algid解析错误,而不是序列)

我正在尝试将使用ssl生成的私有RSA密钥加载到java中,我的代码是: 生成密钥 : openssl genrsa -out mykey.pem 1024 结果: —–BEGIN RSA PRIVATE KEY—– MIICXAIBAAKBgQCUibP4fY2PA/sGMKMbU6usuIGcOAqgQjD6c2ylVo05Oz7pgjnE +O0l2MFRUYUGT5KKk/W+0cAXkxaQHE3n8A8X1mHT8eMDmWnzz0PeYjDE8LQmAw8R Y2FnVKFAB36BIjdb5FsZmCk5QYKU5+nWLMqH/j/IR5AyX5wR2SMoslUg2QIDAQAB AoGAeJ1s7638IhLIZtldyRXjRKi6ToFPV50IKodJxOSIXt3WE0V05ZaA84eUSxUY IOzCgRbuqVmnUz1USAdD18AecC8qc7tXTRALLy7q8fxklPwmGPUOvTFmI7gRMUnv cWrq1gySk3SKpj0YmWnuY9Xmd2+xoWLzUeFD1CROY5OTjIECQQDDlp1+Al7+duR0 XyMlkWLIk0nIbkQ5zlTAEipzmaeTSOJi6YG3EMMz3AGuZb7tw6HFxWqeg1hyKJ+T cTM3WTdJAkEAwmrCDKE29n3wFOBKsZZFQbDgVOUXCBs2ubEI+ALe1DJU5BlfnrhJ OINRCNgnwSFNbwxDTkDpR6J6Av2ElAvNEQJAV0dVvk5Wj50Ecz2lFHWdLD41taAn B9igDxnMIcvWcK4cf+ENhmCPiwvJIEa8/aLIBNYErvmTtVWVaBkirrc8KQJABr+z +sJB6S6X/fGHRkDkKJKeRvQo54QiUzHdENbwq0cQAVcMJbNZ/1c3oen2/1JLoNY5 I+dG8dCnEaGBT65VMQJBAIDqH1Kqs5tb51cpt6h9ot31SUVud5pSML/babwp3pRs 1s6poreym4PkAyRug0Dgcj1zVLt25TlOHvrL9r3Swq8= —–END RSA PRIVATE KEY—– 加载: String privKeyPEM=readFile(“mykey.pem”); privKeyPEM= privKeyPEM.replace(“—–BEGIN RSA PRIVATE KEY—–“, “”).replace(“\n”, “”); // Remove the first and last lines privKeyPEM = privKeyPEM.replace(“—–END RSA PRIVATE KEY—–“, “”); System.out.println(privKeyPEM); […]

Java中的确定性RSA加密

这是我在这个网站上的第一个问题,我对RSA只有基本的数学理解,所以请耐心等待! 🙂 我正在为大学的最后一年项目编写一个Java Web应用程序。 这是一个基于网络的“Pret-a-voter”实施,这是一个安全的投票系统,适用于那些听过它的人。 基本上我的问题是我希望能够给某人履行审计员的角色: 源字节数组(要加密的明文) RSA公钥文件 一个“ 目标 ”字节数组,这是我自己计算明文和公钥的密码数据的结果 然后,我希望审计员能够使用前两项执行加密,并确信第三项是结果。 因此,我需要加密是确定性的 ,即每次重复使用相同的明文和公钥加密时生成相同的密码数据。 (注意 – 我正在使用这个项目中的非常小的数据块 – 根本没有涉及对称加密……我知道这是RSA的“有趣”使用!) 无论如何,我发现在Java中,使用 cipher = Cipher.getInstance(“RSA”); 使用默认的随机填充方案,成本为11个字节(因此,对于2048位密钥对,可以加密2048 / 8-11 = 245个字节)。 对同一明文的重复加密会产生不同的密文,这显然不是我想要的ECB模式。 我的问题是 – 我应该使用以下内容吗? cipher = Cipher.getInstance(“RSA/ECB/NoPadding”); 我已经在很多地方看到RSA没有填充而不安全。 这仅仅是因为攻击者可以建立明文/密文字典吗? 这是我需要的确定性加密的副作用,以便允许审核员validation我的加密,并且在我的方案中,审核员是可信的 ,这样就可以了。 我的问题的第二部分是与java相关的。 如果我确实如上所述使用RSA / ECB / NoPadding,我相信我能够提供(例如)长度128(对于1024位RSA密钥对)的源字节数组并加密以获得另一个长度的字节数组128.如果我再次尝试使用不同的1024长度公钥加密,我得到 javax.crypto.BadPaddingException:消息大于模数 有谁知道为什么? 编辑 – 使用NoPadding加密并不总是会产生这种exception – 这是一种性情。 但是,即使加密不会生成此exception,解密也会生成: javax.crypto.BadPaddingException:数据必须以零开头 非常感谢您阅读本文! […]

使用给定公钥的RSA加密(使用Java)

我正在寻找一个Java示例如何使用给定的公钥进行RSA加密(我使用的是base64格式,似乎是1024位长度)。 下面是我的代码,但我有InvalidKeySpecexception。 String publicKey = “AJOnAeTfeU4K+do5QdBM2BQUhfrRI2rYf/Gk4a3jZJB2ewekgq2VgLNislBdql/glA39w0NjXZyTg0mW917JdUlHqKoQ9765pJc4aTjvX+3IxdFhteyO2jE3vKX1GgA3i3n6+sMBAJiT3ax57i68mbT+KAeP1AX9199aj2W4JZeP”; KeyFactory keyFactory = KeyFactory.getInstance(“RSA”); byte[] res = new Base64Encoder().decode(publicKey.getBytes()); X509EncodedKeySpec KeySpec = new X509EncodedKeySpec(res); RSAPublicKey pubKey = (RSAPublicKey)keyFactory.generatePublic(KeySpec); // here the exception occurs.. Cipher cipher = Cipher.getInstance(“RSA/None/PKCS1Padding”); cipher.init(Cipher.ENCRYPT_MODE, pubKey); byte[] cipherData = cipher.doFinal(input.getBytes()); return cipherData; 请给我样品,

使用bouncycastle / spongycastle读取加密的私钥

我有一个密码保护,加密的RSA私钥,它是用PyCrypto(2.6.1)创建的,并根据他们的文档有以下格式: PrivateKeyInfo, PKCS#8 (DER SEQUENCE), PEM (RFC1423) ,见[ https: //www.dlitz.net/software/pycrypto/api/current/Crypto.PublicKey.RSA._RSAobj-class.html#exportKey] 。 如何使用Bouncycastle / Spongycastle解密此RSA密钥? 我已经搜索了Google很长一段时间,只得到了结果,这些结果要么不适用于版本1.50(因为PEMReader已被弃用并被删除),要么是PEMParser的例子似乎无法读取此格式。 顺便说一下:我错过了关于Bouncycastle的文件吗? 这是我加密的私钥的标题: —–BEGIN PRIVATE KEY—– Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,68949227DD8A502D xyz… 如果有人能帮助我,我真的很感激!

在JAVA中读取格式为PKCS1的RSA私钥

是否可以在JAVA中读取格式为PKCS1的RSA私钥而无需转换为PKCS8? 如果是,请欣赏示例代码。 —–BEGIN RSA PRIVATE KEY—– BASE64 ENCODED DATA —–END RSA PRIVATE KEY—–