获得javax.net.ssl.SSLHandshakeException: 收到致命警告:handshake_failure
消耗HTTPS Web服务时,我的错误是错误的.在Java 6中运行客户端时,我有一个错误.我无法更改JDK的版本.我尝试了JDK8,它可以很好地工作. 什么可能导致此错误? 我添加了unlimitedjcepolicyjdk6 jar; 我的客户端代码: System.setProperty("javax.net.ssl.trustStore", "bci-to-scoring-keystore-client.jks"); System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); //connection.setSSLSocketFactory(s
0 2023-05-22
编程技术问答社区
SunJCE SHA1WithRSA使用的是什么填充策略?
通常PSS和PKCS1v15可用于RSA签名填充. 对于Java而言,代码也很简单,但它只是无法分辨使用的填充策略. 我的代码: Signature signature = Signature.getInstance("SHA1WithRSA"); signature.initSign(privateKey); signature.update(plainBytes); byte[] signBytes = signature.sign(); 我是否可以用MGF1明确定义PSS作为使用Sunjce作为提供商的填充策略? 解决方案 PSS sunjce .但是,SHA256withRSA/PSS在 android . 我建议使用Bouncycastle Security.addProvider(new BouncyCastleProvider()); Signature sig = Signature.getInstance("SHA1withRSA/PS
6 2023-05-16
编程技术问答社区
java中的密码填充字符串是什么
每个人都在谈论密码中的填充方案,但是人们需要传递到密码的实际字符串是什么?我不在乎它们是对称的还是不对称的,我只想要可能的值列表. 解决方案 有多种类型的填充,PKCS-7,零,ISO 10126,ANSI X.923等. 我建议您阅读 padding ,因为您似乎不完全理解这个概念. 然后,您可能会参考加密 salt .. 编辑 要求使用括号中的按键来支持以下标准密码转换: ,都需要使用Java平台的每个实现. AES/CBC/nopadding(128) AES/CBC/PKCS5PADDING(128) AES/ECB/NOPADDING(128) AES/ECB/PKCS5PADDING(128) des/cbc/nopadding(56) des/cbc/pkcs5padding(56) des/ecb/nopadding(56) des/ecb/pkcs5padding(56) desede/cbc/nopadding(168) de
0 2023-05-16
编程技术问答社区
在解密用OpenSSL生成的 "der "文件时出现异常:用加垫密码解密时输入长度必须是8的倍数
首先,我使用openSSL生成一个私有RSA键文件,然后将其转换为加密的" der"文件: $ openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem -out private_key.der 接下来,我尝试使用以下代码从Java解密此文件(在此阶段,我已经使用本文底部的代码将文件读取到byte[] key数组中): public static byte[] decryptPrivateKey(byte[] key) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingExce
2 2023-05-11
编程技术问答社区
在Java中加密AES/CBC,在Ruby中解密
我正在尝试将以下(工作)Java代码转换为Ruby. public static final String PROVIDER = "BC"; public static final int IV_LENGTH = 16; private static final String HASH_ALGORITHM = "SHA-512"; private static final String PBE_ALGORITHM = "PBEWithSHA256And256BitAES-CBC-BC"; private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding"; private static final String SECRET_KEY_ALGORITHM = "AES"; public String decrypt(SecretKey secret, String enc
0 2023-05-11
编程技术问答社区
我能否从openssh公钥的Q值和ECParameterSpec中创建一个JCE ECPublicKey?
我正在阅读openssh格式椭圆形曲线公共键( rfc 5656,RFC 5656,RFC 5656,部分3.1 ),并希望从BigInteger Q值获得ECPublicKey实例(而不是说Bouncycastle).我想这样做以验证 jwt signatures. 例如. https://api.github.com/users/davidcarboni/keys P> ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBK8hPtB72/sfYgNw1WTska2DNOJFx+QhUxuV6OLINSD2ty+6gxcM8yZrvMqWdMePGRb2cGh8L/0bGOk+64IQ/pM= 看起来我可以使用ECPublicKeySpec.这需要两个参数.一个ECPoint和ECParameterSpec.我能够使用以下JCE代码获得参数规格(以及关键数据的OpenSSH标识符
2 2023-05-11
编程技术问答社区
Java/Kotlin输出Ed25519密钥对,既是JCE密钥对实例,又是OpenSSH格式。
我正在使用 bouncycastle 图书馆库,并拥有 提供关键对作为提供openssh .pub格式的公共密钥,供用户复制并粘贴到git存储库提供商,例如github(即ssh-ed25519 ) 我有两个使用Bouncycastle生成键的选项,每个选项都使这些要求之一变得容易. 使用Bouncycastle Generator直接生成 val generator = Ed25519KeyPairGenerator() generator.init(Ed25519KeyGenerationParameters(SecureRandom())) val pair = generator.generateKeyPair() 这给了我一个包含Ed25519PublicKeyParameters的键,这使得使用Bouncycastle提供的OpenSSHPublicKeyUtil获得OpenSSH .PUB格式非常容易:
0 2023-05-11
编程技术问答社区
使用openssh公钥(ecdsa-sha2-nistp256)与Java安全
是否有Java库/示例可以阅读JAVA中JCE PublicKey的OpenSSH格式的ECDSA公钥?我想将ec用于 jwt . 我要阅读的格式是按照授权_keys或github api(例如):ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBK8hPtB72/sfYgNw1WTska2DNOJFx+QhUxuV6OLINSD2ty+6gxcM8yZrvMqWdMePGRb2cGh8L/0bGOk+64IQ/pM= 我找到了这个答案,这对RSA和DSS很好: 使用Java Security的exturenized_keys使用public键和讨论ECDSA的OpenSSH格式的讨论:https://security.stackexchange.com/questions/129910/ecdsa-why-do-ssh-keygen-and-java-generated-publ
6 2023-05-11
编程技术问答社区
用Objective-C加密数据并用Java问题解密
我有一种iPhone解决方案,该解决方案使用XML在客户端(移动)和服务器(Java)之间传输数据.由于传输的信息类型,必须对消息的某些部分(XML)进行加密.我计划使用AES 128来加密和解密这两个端点之间的数据. 首先,使用Object-C的CommonCrypto框架对敏感数据进行加密,然后将数据解密在Java服务器(Servlet)中. 我是安全协议和标准的新手,基本上我的代码是我可以在Apple的Dev论坛/资源和Internet(Google)的一组信息组中: - ) 基本流量是: 使用AES对数据进行加密(使用预设密钥). 将加密字节放置在XML(使用base64) 中 数据是从XML收集的,并使用相同的预定键进行解密; 对象-C代码的加密部分是: char keyPtr [ kCCKeySizeAES128 +1 ]; bzero( keyPtr, sizeof(keyPtr) ); // The secret key is m
2 2023-05-05
编程技术问答社区
如何使用AES CCM与Bouncycastle JCE提供商-CCMParameters
是否可以使用JCE执行CCM? 我使用非JCE Bouncycastle课程在Internet上看到了很多示例.特别是,我看到他们在CCMparameters对象中调用Init传递. 麻烦是,此ccmparameters对象不会源自algorthmparameters或algorithmparameterspec,因此似乎没有办法将其传递到cipher.init()(在使用cipher.getinstance获得cipher对象之后) nopadding")). 如何做到这一点? 解决方案 嗨,这是AES-CCM算法的示例代码 所有常规名称都是输入参数. 注意十六进制数据字节和所有其他内容 import org.bouncycastle.crypto.BlockCipher; import org.bouncycastle.crypto.InvalidCipherTextException; import org.bouncycastle.crypto.e
4 2023-04-19
编程技术问答社区
HSM解密 + 加密链
我的应用程序充当了两个方之间传输非常敏感的消息的总机,我试图弄清楚如何在不"查看"他们试图发送的消息的情况下做到这一点. 我有一个HSM,我已经为发件人生成了一个按键 - 他们将使用我给他们的公共密钥加密消息,我可以使用我在HSM. 我将通过使用我拥有的终极接收器的公共密钥加密来传递该消息. 是否有任何方法可以将这两个操作链在HSM内,而无需在我的应用程序内存附近将其解密的消息在任何地方进行?我希望明文内容永远不会离开HSM的边界. 我知道某些HSM具有CODESEFE/SEE Machine功能,该功能使我能够编写嵌入式系统代码并在HSM中运行,然后才能进入我想查看是否有一种使用常规PKCS/JCE的方法./cng apis安全执行此操作. 解决方案 如果您只需要在另一个密钥下重新加入相同的秘密,则可以使用C_Unwrap创建具有翻译秘密值的时间HSM对象,然后使用C_Wrap来加密所有收件人的时间HSM对象的值. 这样,秘密将永远不会离开HSM.
16 2023-04-19
编程技术问答社区
使用CipherInputStream和CipherOutputStream对文件进行加密和解密
我一直在尝试在AES中编写一个加密文件,并随后使用JCA中提供的密码流进行解密.但是,在阅读文件时,我遇到问题,因为解密正在干扰. public class CipherStreams { public static void main(String[] args) { try { KeyGenerator keygen = KeyGenerator.getInstance("AES"); Key k = keygen.generateKey(); Cipher aes = Cipher.getInstance("AES/ECB/PKCS5Padding"); aes.init(Cipher.ENCRYPT_MODE, k); FileOutputStream fs = new FileOutputStream("Encrypyed.txt"); CipherOutputStr
14 2023-04-19
编程技术问答社区
有没有一种实用的方法来确定哪些JCE密码器正在使用?
我们已经配置了Java产品,仅使用FIPS验证的RSA JCE加密提供商.但是,当仅 RSA库在Java.Security中列出时,该产品将无法正常工作.因此,有些东西是从另一个提供商那里要求非FIPS算法. 通过消除过程,我们可以分辨出成功操作的必要条件,但这并不能告诉我们要求使用哪种算法,或者是谁. 这似乎是一个常见的问题,但是显然我们没有偶然发现了正确的文档或Google搜索字符串:是否有任何可靠,方便且一致的机制来确定在一个中使用哪些JCE提供商运行JVM实例? 解决方案 好吧,您可以使用 security.getProviders(); 以下是其他解决方案 我建议您实施您自己的不过,我不确定这是否会让您知道加载foojceprovider的每个类,而不仅仅是加载foojceprovider的第一类. 另外,您是否尝试使用 jconsole "> jconsole ? "类加载MBEAN还具有详细属性,可以将其设置为启用或禁用类加载的冗长跟踪"
8 2023-04-12
编程技术问答社区
如何在OS X中为Java 8安装无限强度JCE?
我需要在OS X/mac OS中安装 Java加密扩展.事实证明,安装程序仅包含Unix和Windows的说明,但不包括OS X>/mac OS.我试图将jar文件放入$JAVA_HOME/lib/security中,但也没有用.您知道我该如何安装吗? 解决方案 Java 8 Update 161 如另一个答案和Oracle's java 8 Update 161的发行说明161 ,默认情况下,无限制的密码是启用的,因为您不应该更新161,并且您不应该拥有161如果使用此版本或更高版本的新安装,请执行任何操作. Java 8 Update 151 使用Java 8 Update 151,Oracle将相同的JCE机制包括在Java 8中,它们已经提供了Java 9.启用JCE在Java 8 Update 151或更高版本中,只需设置属性 crypto.policy=unlimited in $JAVA_HOME/jre/lib/security/jav
2 2023-03-16
编程技术问答社区
local_policy.jar和US_export_policy.jar的强度无限与默认不同。
在Java平台文档中/jrereadme-182762.html .关于 的评论 /lib/security/local_policy.jar /Lib/security/us_export_policy.jar 无限强度Java加密扩展 由于某些国家的进口控制限制,Java加密扩展(JCE)策略文件使用Java SE开发套件和Java SE运行时环境运输,可以使用强大但有限的加密术. 这些文件的无限强度版本,表明在JDK网站上为居住在合格国家/地区的人们提供了对加密优势的限制.居住在符合条件的国家/地区的人可以下载无限的强度版本,并用无限的强度文件代替强大的加密罐子文件. 问题 每个JDK捆绑包都带有local_policy.jar和us_export_policy.jar? 默认local_policy.jar和us_export_policy.jar的限制是什么?是关键大小吗? 如果我需要使用128位键,是否需要使用无限的强度Java加密量 扩展
6 2023-03-07
编程技术问答社区
生成GOST 34.10-2001密钥对并将其保存到某个密钥库中
目前,我需要为GOST 34.10-2001签名算法生成Keypair.令人愉快的发现,有弹性城堡提供商支持该算法,但我无法生成按键,并将其保存到任何类型的任何钥匙店.目前,我尝试了此命令(如果keyalg是DSA,并且Sigalg是SHA1withDSA): keytool -genkey -alias test1 -keyalg ECGOST3410 -keysize 512 -sigalg GOST3411withECGOST3410 \ -keypass test_1 -validity 1000 -storetype JKS -keystore test1.jks -storepass test_1 -v \ -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk16-1.46.jar" 但是我有一个错误: keytool error: jav
8 2023-02-24
编程技术问答社区
信任存储与使用keytool创建密钥存储
我知道,密钥库通常会容纳私人/公共钥匙,而信托存储仅限公共钥匙(并代表您打算与之交流的可信方列表).好吧,这是我的第一个假设,所以如果那不正确,我可能还没有很好地开始... 我有兴趣了解/当您使用keytool时如何区分商店时. 所以,到目前为止,我已经使用 创建了一个密钥库 keytool -import -alias bob -file bob.crt -keystore keystore.ks 创建我的keystore.ks文件.我回答yes我信任鲍勃的问题,但我不清楚这是否创建了一个密钥库文件或一个信托店文件?我可以设置我的应用程序将文件用作. -Djavax.net.ssl.keyStore=keystore.ks -Djavax.net.ssl.keyStorePassword=x -Djavax.net.ssl.trustStore=keystore.ks -Djavax.net.ssl.trustStorePassword=x 和System
6 2023-02-24
编程技术问答社区
生成BKS密钥库并存储应用程序密钥
我应该创建一个BKS密钥库,并存储一个私有应用程序密钥,该密钥是该密钥库中的48个字符长字符串. 我还有一个JCEKS密钥库,该密钥库已经有此密钥值.如果我尝试使用Portecle工具将键入键转换为BKS类型键盘,则丢失了密钥输入. 我是JCE的新手.有人可以指导我在密钥库中导入此密钥需要做什么? 谢谢. 解决方案 尝试此命令 keytool -importcert -v -trustcacerts -file "cacert.pem" -alias ca -keystore "mySrvTruststore.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk16-145.jar" -storetype BKS -storepass testtest
68 2023-02-24
编程技术问答社区
Java 1.7+JSCH:Java。安全InvalidKeyException:该算法的密钥太长
我正在尝试使用com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidKeyException: Key is too long for this algorithm at com.jcraft.jsch.Session.connect(Session.java:558) ~[jsch-0.1.51.jar:na] at com.jcraft.jsch.Session.connect(Session.java:183) ~[jsch-0.1.51.jar:na] 我已经看过帖子描述了此错误a>升级到Java 8时,但是我们仍在Java 7上,我对Java的加密支持不足以知道这是否重要. 有些人建议安装JCE(Java密码扩展程序)来解决此问题,因此我对其进行了镜头,但是在将适当的JAR文件复制到/libs/Security Directory中并重新启动应用程序后,我仍然会遇到相同的错误.我们确
0 2023-02-15
编程技术问答社区
EC2 Linux机器上安装的OpenJDK 8不支持ECDHE密码套件
使用openjdk 1.8.0_51在EC2 Amazon Linux机上运行openjdk 1.8.0_51时,是所有配置的ECDHE套件不支持的打印. 2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 not supported 2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 not supported 2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 not supported 2015-08-12 16:51:20 main SslCont
2 2023-02-02
编程技术问答社区