我知道密钥库通常会保存私钥/公钥,信任存储只保存公钥(并代表您打算与之通信的可信方列表).嗯,这是我的第一个假设,所以如果这不正确,我可能还没有开始......
我对使用keytool时如何/何时区分商店感兴趣.
所以,到目前为止,我已经创建了一个密钥库
keytool -import -alias bob -file bob.crt -keystore keystore.ks
Run Code Online (Sandbox Code Playgroud)
这将创建我的keystore.ks文件.我回答yes问题我是否相信bob但是我不清楚这是否创建了密钥库文件或信任库文件?我可以设置我的应用程序以使用该文件.
-Djavax.net.ssl.keyStore=keystore.ks -Djavax.net.ssl.keyStorePassword=x
-Djavax.net.ssl.trustStore=keystore.ks -Djavax.net.ssl.trustStorePassword=x
Run Code Online (Sandbox Code Playgroud)
并且使用System.setProperty( "javax.net.debug", "ssl")set,我可以在受信任的证书下看到证书(但不在密钥库部分下).我导入的特定证书只有一个公钥,我打算用它通过SSL连接向Bob发送内容(但也许最好留给另一个问题!).
任何指示或澄清都将非常感激.无论你导入什么,keytool的输出都是相同的,它的惯例是一个是密钥库而另一个是信任存储?使用SSL等时的关系是什么?
我有一个使用256位AES加密的应用程序,开箱即用的Java不支持.我知道要使其正常运行我在安全文件夹中安装JCE无限强度jar.这对我作为开发人员来说很好,我可以安装它们.
我的问题是,由于此应用程序将被分发,最终用户很可能不会安装这些策略文件.让最终用户下载这些只是为了使应用程序功能不是一个有吸引力的解决方案.
有没有办法让我的应用程序运行而不覆盖最终用户机器上的文件?可以在没有安装策略文件的情况下处理它的第三方软件?或者从JAR中引用这些策略文件的方法?
通过环顾四周和一般的互联网,我找到了Bouncy Castle.我想使用Bouncy Castle(或其他一些免费提供的实用程序)在Java中生成一个SHA-256 Hash of String.看看他们的文档,我似乎找不到任何我想做的好例子.这里有人可以帮帮我吗?
jar(bcprov-jdk16-145.jar)已添加到项目中,Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider())已添加到类中,并BouncyCastleProvider.PROVIDER_NAME返回"BC"但AesFileIo.writeFile()仍然会抛出java.security.NoSuchProviderException No such provider: BC.有任何想法吗?
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class AesFileIo {
private static final String AES_ALGORITHM = "AES/CTR/NoPadding";
private static final String PROVIDER = BouncyCastleProvider.PROVIDER_NAME;
private static final byte[] AES_KEY_128 = { // Hard coded for now
78, -90, 42, 70, -5, 20, -114, 103,
-99, -25, 76, 95, -85, 94, 57, 54};
private static final byte[] IV = { // …Run Code Online (Sandbox Code Playgroud) 我需要安装Java加密扩展为Java 8在OS X/ mac OS.事实证明,安装程序附带的自述文件中的步骤仅包含和,但不适用于/ .我试图将JAR文件放入,但它也没有用.你知道我怎么安装它们?UnixWindowsOS Xmac OS$JAVA_HOME/lib/security
我有一个在我的开发MacBook Pro上运行良好的测试,但无法在持续集成的TeamCity服务器中运行.
错误如下:
java.security.InvalidKeyException: Illegal key size
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
Run Code Online (Sandbox Code Playgroud)
开发盒和TeamCity都使用Java 1.6,我使用BouncyCastle库来满足特殊的AES加密需求.
代码如下:
private byte[] aesEncryptedInfo(String info) throws UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidParameterSpecException, InvalidAlgorithmParameterException, NoSuchProviderException {
Security.addProvider(new BouncyCastleProvider());
SecretKey secret = new SecretKeySpec(CUSTOMLONGSECRETKEY.substring(0, 32).getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, secret, new IvParameterSpec(VECTOR_SECRET_KEY.getBytes()));
return cipher.doFinal(info.getBytes("UTF-8"));
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
看起来根据所选答案,我必须在我的TeamCity安装上修改一些东西,它可能会影响一些用户安装 - 所以它不是一个好选择我必须切换到另一个加密库来做到这一点没有限制.所以充满弹性的城堡可能会有所帮助.
更新2
我实际上切换到使用BouncyCastle来避免这种限制.请注意,这仅适用于直接使用自己的BC类,而不是BC提供程序.
使用标准JDK在Java中生成安全随机AES密钥的推荐方法是什么?
在其他帖子中,我发现了这一点,但使用a SecretKeyFactory可能是一个更好的主意:
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
SecureRandom random = new SecureRandom(); // cryptograph. secure random
keyGen.init(random);
SecretKey secretKey = keyGen.generateKey();
Run Code Online (Sandbox Code Playgroud)
如果答案包括解释为什么它是生成随机密钥的好方法,那将是很好的.谢谢!
如果JCE Unlimited Strength Jurisdiction Policy文件已在JVM中正确安装(因为系统的某些其他部分表现得好像不是这样),我很自信.
有人可以提供一个代码示例,我可以用它来检查这些文件是否实际上被JVM使用?
我为MacOSX安装了Oracle JRE 7(不是JDK),但我无法找到放置JCE管辖区文件的位置.
我需要用无限强度版本替换它们.
java ×10
jce ×10
aes ×3
macos ×2
bouncycastle ×1
cryptography ×1
encryption ×1
keytool ×1
policyfiles ×1
security ×1
sha256 ×1
ssl ×1