Tag: aes

Java TLS 1.2服务器:AES-GCM解密

我目前正在研究Java TLS服务器。 (几天前我发布了关于KeyExchange签名的post) 我现在正在尝试解密使用AES-GCM编码的TLS消息。 服务器已经处理了CBC,但由于它很容易受到POODLE的影响,我们想要改为使用GCM。 我会尽力解释:) 对于此代码,我们使用的是Java 8u91,Netty 3.9.0。 我们不使用BouncyCastle,我们不打算,我们想坚持使用JDK。 代码 ! /** * Deciphers the fragment and returns the deciphered version of it * * @param fragment * to decrypt * @return the decrypted fragment * @throws InvalidKeyException * @throws InvalidAlgorithmParameterException * @throws IllegalBlockSizeException * @throws BadPaddingException */ private ChannelBuffer decodeCiphered(ChannelBuffer fragment, short contentType, […]

为什么在用充气城堡解密后附加这些方形符号?

我创建了一个简单的java方法,使用充气城堡库加密和解密文本。 加密按预期工作,但是当我解密某些内容时,我会在最后得到这些额外的方形符号: 我认为这可能与填充有关,但我已经按照bouncy castle网站上的例子进行了操作,所以我真的不明白为什么我会得到这种输出。 这是我正在使用的代码: [主要] public static void main(String[] argv) { String ciphertext = “PlJR5pzbowsuzHIc9iTKHg==”; String decrypted; CryptoCodec codec = new CryptoCodec(); decrypted = codec.exec(“AES”, “xxxxooooxxxxoooo”, ciphertext, false); System.out.println(“Ciphertext: ” + ciphertext); System.out.println(“Decrypted: ” + decrypted); } [CryptoCodec] // Eod: (true) Encrypt or (false) decrypt. public String exec(String algorithm, String key, String data, boolean […]

使用AES SecretKey的Java KeyStore setEntry()

我目前正在使用Java中的密钥处理类,特别是使用KeyStore。 我正在尝试使用AES实例生成SecretKey,然后使用setEntry()方法将其放在KeyStore中。 我已经包含了我的代码的相关部分: // The KS Object private KeyStore keyStore; private KeyStore.SecretKeyEntry secretKeyEntry; private KeyStore.ProtectionParameter protectionParameter; private KeyGenerator keyGenerator; private SecretKey secretKey, newSecretKey; keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyGenerator = KeyGenerator.getInstance(“AES”); keyGenerator.init(256); newSecretKey = keyGenerator.generateKey(); protectionParameter = new KeyStore.PasswordProtection(KEYSTORE_PASSWORD.toCharArray()); secretKeyEntry = new KeyStore.SecretKeyEntry(newSecretKey); keyStore.setEntry(KEYSTORE_ALIAS, secretKeyEntry, protectionParameter); 我使用的两个常量也定义为字符串。 我不断得到的exception是在我的setEntry()调用中: java.security.KeyStoreException: Cannot store non-PrivateKeys at sun.security.provider.JavaKeyStore.engineSetKeyEntry(Unknown Source) at sun.security.provider.JavaKeyStore$JKS.engineSetKeyEntry(Unknown […]

实施充气城堡aes 256

我正在开发一个聊天应用程序。 主要function是以加密forms发送消息,当它们到达目的地时,它们可以被解密。 我遇到的问题是邮件在目的地没有被解密,但是它们以加密forms到达目的地。 代码如何工作: 客户端A向客户端B发送消息“Hello”… 当客户端A点击按钮“发送消息”时,我将该文本保存在字符串中,然后将该字符串与密钥和iv一起传递给方法加密,如下所示…… en=enc.encrypt(msg.getBytes(), key.getBytes(), iv.getBytes()); 我将该字节( en )转换为字符串并将其发送到另一个客户端B. 当我打开另一个接收消息的类时,我得到字符串(en),然后再将其转换为字节,然后传递给方法Decrypt。 但每当我运行该项目时,它都无法运行。 试图在尝试捕获中做到这一点,但也没有工作。 也许是因为它已经在一个很大的尝试捕获声明已经使它更令人困惑。 我的代码: package com.socket; import org.bouncycastle.crypto.CipherParameters; import org.bouncycastle.crypto.engines.AESEngine; import org.bouncycastle.crypto.modes.CBCBlockCipher; import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher; import org.bouncycastle.crypto.params.KeyParameter; import org.bouncycastle.crypto.params.ParametersWithIV; public class Encrypt { public Encrypt() { } public static byte[] cipherData(PaddedBufferedBlockCipher cipher, byte[] data) throws Exception { int minSize = cipher.getOutputSize(data.length); byte[] outBuf […]

如何用Bouncy Castle生成对称密钥?

如何使用Bouncy Castle生成对称密钥? PrivateKeyFactory和PublicKeyFactory似乎都与AsymmetricKeyParameter相关。 我不想知道任何JCA / JCE API – 相反,我只对Bouncy Castle特定的API感兴趣。 可以(应该)我只生成一个随机字节?

Java Cipher – PBE线程安全问题

我似乎有Cipher和/或PBEKeySpec的线程安全问题。 JDK:1.8.0_102,1.8.0_151和9.0.1 + 11 PBKDF2算法:PBKDF2WithHmacSHA1 密码算法:AES / CFB / NoPadding 关键算法:AES 我知道如果我们使用相同的实例,这些类不是安全的,但事实并非如此,我在每次解码时都会得到一个新的实例。 但即便如此,有时解码失败,也没有例外,只是意外的解码值。 我已经能够重现这个问题: @Test public void shouldBeThreadSafe() { final byte[] encoded = { 27, 26, 18, 88, 84, -87, -40, -91, 70, -74, 87, -21, -124, -114, -44, -24, 7, -7, 104, -26, 45, 96, 119, 45, -74, 51 }; final String expected = […]

PBEWITHSHA256AND128BITAES-CBC-BC在RedHat 6.4上创建java.security.NoSuchAlgorithmException

我们有一个使用Bouncy Castle的应用程序使用PBEWITHSHA256AND128BITAES-CBC-BC算法加密数据。 它在运行OpenJDK 1.7 Ubuntu运行良好。 但是当我们将它移动到也运行OpenJDK 1.7 RedHat 6.4 ,我们得到以下exception: java.security.NoSuchAlgorithmException 关于可能导致这种情况的任何想法。 我们如何在RedHat 6.4添加PBEWITHSHA256AND128BITAES-CBC-BC算法? ps应用程序在JBoss运行。 private String cryptoAlgorithm = “PBEWITHSHA256AND128BITAES-CBC-BC”; Security.addProvider(new BouncyCastleProvider()); // load passPhrase from configured external file to char array. char[] passPhrase = null; try { passPhrase = loadPassPhrase(passPhraseFile); } catch (FileNotFoundException e) { throw BeanHelper.logException(LOG, methodName, new EJBException(“The file not found: ” […]

如何将AESCrypt中的IV与JAVA和RUBY相匹配

我将加密ID和昵称放到数据库中。 但是当我需要在ruby中获取ID和昵称时会出现问题,因为ruby中的AESCrypt不起作用。 我认为问题是IV与ruby和java不一样 这是我用在java代码中(实际上在android中) public class AESCrypt { private final Cipher cipher; private final SecretKeySpec key; private AlgorithmParameterSpec spec; public AESCrypt(String password) throws Exception { // hash password with SHA-256 and crop the output to 128-bit for key MessageDigest digest = MessageDigest.getInstance(“SHA-256”); digest.update(password.getBytes(“UTF-8”)); byte[] keyBytes = new byte[16]; System.arraycopy(digest.digest(), 0, keyBytes, 0, keyBytes.length); cipher = […]

AES加密Java到c#

我有以下代码,在java中为我加密/解密数据 我需要在Windows Phone(8)设备上加密/解密C#中的数据,并且相同的数据应该能够使用此java代码进行解密/加密。 在Windows Phone中C#中这个java代码的等效代码是什么? public class AESencrp { private static final String ALGO = “AES”; private static final byte[] keyValue = new byte[] { ‘S’, ‘D’, ‘P’, ‘i’, ‘b’, ‘m’, ‘B’,’H’, ‘A’, ‘R’, ‘T’,’I’, ‘P’, ‘K’, ‘e’, ‘y’ }; public static String encrypt(String Data) throws Exception { System.out.println(“………….Encryption start…………”); Key key = generateKey(); System.out.println(“Key […]

PHP,Java,Javascript之间的AES互操作性

我正在开发一个需要加密的HTTP API。 我曾尝试使用AES来获得Java,PHP和Javascript之间的兼容性,但到目前为止,我已经设法获得Java PHP,然后是Java Javascript,但不能同时获得PHP和Javascript。 有没有人有过实现这些语言之间的互操作性的经验? 任何建议将不胜感激。 谢谢