Tag: 加密 非对称

将公钥和私钥存储在数据库或密钥库中

我正在制作一个Web服务,它将为数据库表中的每条记录存储公钥和私钥。 密钥是使用Java创建的,但我不确定创建密钥库的天气或将密钥直接放在数据库中的字段中。 您会推荐什么选项?每种方法有哪些好处?

Java – 使用预共享公钥并且没有信任存储麻烦的流量的非对称加密

我正在尝试使用RSA预共享密钥进行通信,理想情况下, 不涉及信任库的恶作剧 设置基本上是这样的: 客户端有一个applet,服务器端有一个servlet(duh :)) applet有servlet的RSA公钥(Spub)硬编码。 servlet有自己的RSA私钥(Spriv)硬编码。 他们的applet生成一个随机的AES 256密钥(会话密钥),用servlet的公钥(它已硬编码)加密它,通过TCP套接字连接到servlet,并将RSA加密的密钥发送到servlet,后者继续解密会话密钥,只要此套接字连接持续,就可以将其用于与此applet的任何进一步通信。 我宁愿这样做而不会弄乱信任库等(毕竟,它是一个相对简单的设置,允许预共享硬编码的公钥) 关于我应该从哪里开始教育自己的任何建议?

Java公钥私钥解密问题

我正在尝试加密和解密消息,如下面的代码所示。 基本上我想用公钥加密消息,并将该加密消息从字节数组转换为String。 并将此字符串解密为原始文本。 以下是这两种方法。 这里加密工作正常,但解密失败(错误是“数据必须从零开始”)。 我认为这是因为我将加密的字节数组转换为String。 我该如何解决这个问题? (我希望将加密的字节数组作为字符串并用于解密)是否有其他方法(使用公钥和私钥) public static String getEncryptedMessage(String publicKeyFilePath, String plainMessage) { byte[] encryptedBytes; try { Cipher cipher = Cipher.getInstance(“RSA”); byte[] publicKeyContentsAsByteArray = getBytesFromFile(publicKeyFilePath); PublicKey publicKey = getPublicKey(publicKeyContentsAsByteArray); cipher.init(Cipher.ENCRYPT_MODE, publicKey); encryptedBytes = cipher.doFinal(plainMessage.getBytes()); return new String(encryptedBytes); } catch (Throwable t) { } } public static String getDecryptedMessage( String privateKeyFilePath, String encryptedMessage) […]

有关java中公钥加密的任何教程吗?

我已经能够找到有关对称加密和散列的信息,但是我在查找有关java的任何类型的公钥加密的大量信息方面遇到了很多麻烦。 我想做的是做一个非常简单的概念certificate程序,它接受一个字符串(或我认为的文件),用公钥加密它,然后用私钥解密它。 任何教程链接或示例将不胜感激。 我只是想说明如何在Java中使用公钥加密。

Java非对称加密:存储公钥/私钥的首选方式

此代码生成一对公钥/私钥: KeyPairGenerator keyGen = KeyPairGenerator.getInstance(“RSA”); keyGen.initialize(1024); KeyPair keypair = keyGen.genKeyPair(); PrivateKey privateKey = keypair.getPrivate(); PublicKey publicKey = keypair.getPublic(); 我想知道的是你通常如何存储公钥: 选项1:存储字节 byte[] privateKeyBytes = privateKey.getEncoded(); byte[] publicKeyBytes = publicKey.getEncoded(); // … write to file // convert bytes back to public/private keys KeyFactory keyFactory = KeyFactory.getInstance(“RSA”); EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes); PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec); EncodedKeySpec publicKeySpec […]

Flexiprovider – 如何使用格式化的密钥对加密/ de

我使用flexiprovider来加密/ de使用基于Elliptic Curve的非对称算法,遵循本教程 。 稍加修改后,我会将公钥和私钥转换为Base64用于个人目的(如存储到数据库或文本文件中)。 我也在看这个问题 ,答案是参考这个post 。 但我的代码是运行dekstop而不是Android设备,android和dekstop版本的java我认为是一个非常大的区别(只是为了清理我的问题信息)。 好的,在我的代码中,当我要从生成的公钥创建格式化的公钥时,我收到了一个错误(我认为当我尝试为私钥执行此操作时会发生同样的问题)。 现在,这是我的代码: Keypair生成器类。 import org.jivesoftware.smack.util.Base64; //or whatever to convert into Base64 import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import java.security.Security; import java.security.KeyFactory; import javax.crypto.Cipher; import de.flexiprovider.common.ies.IESParameterSpec; import de.flexiprovider.core.FlexiCoreProvider; import de.flexiprovider.ec.FlexiECProvider; import de.flexiprovider.ec.parameters.CurveParams; import de.flexiprovider.ec.parameters.CurveRegistry.BrainpoolP160r1; import de.flexiprovider.pki.PKCS8EncodedKeySpec; import de.flexiprovider.pki.X509EncodedKeySpec; … Security.addProvider(new FlexiCoreProvider()); Security.addProvider(new FlexiECProvider()); […]

BadPaddingException:无效的密文

我想要一些帮助,因为这是我第一次编码加密代码。 加密代码似乎正常工作,但解密会引发错误。 我得到的错误是: de.flexiprovider.api.exceptions.BadPaddingException:无效的密文 在解密函数中朝向代码的末尾,标记为注释 //错误在这里! ………………………… 我已经包含了所有的import产品,请原谅这个,因为它可能与这个问题有关。 非常感谢任何有关我所做错事的帮助。 码: import java.io.UnsupportedEncodingException; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import java.security.Security; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import android.app.Activity; import android.os.Bundle; import android.util.Base64; import android.util.Log; import de.flexiprovider.common.ies.IESParameterSpec; import de.flexiprovider.core.FlexiCoreProvider; import de.flexiprovider.ec.FlexiECProvider; import de.flexiprovider.ec.parameters.CurveParams; import de.flexiprovider.ec.parameters.CurveRegistry.BrainpoolP384r1; import de.flexiprovider.pki.PKCS8EncodedKeySpec; import de.flexiprovider.pki.X509EncodedKeySpec; public […]

加密证书

我在使用私钥加密时使用Microsoft Internet Explorer证书时遇到问题,并使用有问题的公钥解密 1)加密工作文件 public String encryption(String inputData, String key, String certificate) // Certificate is nothing but aliase name { String encriptData = null; String verify = checkForCertificateConfig(); if (!verify.equals(“OK”)) { return verify; } System.out.println(“ENCRYPTION INPUTDATA : ” + inputData); System.out.println(“ENCRYPTION KEY : ” + key); System.out.println(“ENCRYPTION CERTIFICATE : ” + certificate); try { if […]

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

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

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:数据必须以零开头 非常感谢您阅读本文! […]