Tag: 加密

javax.crypto.BadPaddingException:未知块类型

我试图模拟非对称密钥系统。 我使用以下代码生成密钥对,加密,解密密码。 我有一个分布式环境,目前我保存在文件系统中生成的密钥。 我知道这不安全,但仅用于测试目的。 private static SecureRandom random = new SecureRandom(); static { Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); } protected synchronized void generateKeys() throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException { KeyPairGenerator generator = KeyPairGenerator.getInstance(“RSA”, “BC”); generator.initialize(256, random); KeyPair pair = generator.generateKeyPair(); Key pubKey = pair.getPublic(); Key privKey = pair.getPrivate(); //store public key try { storeKey(pubKey, Constants.KEY_PATH.concat(Constants.SERVER_PREFIX.concat(“-publickey”))); } […]

生成安全cookie令牌以持久存储

我正在尝试为我的网站创建登录和注册页面。 我希望使用cookie来跟踪用户会话,但我正在尝试以最恰当和安全的方式实现它。 我已经尝试过查看教程和论坛,但其中大部分已经过时,并且使用人们评论不安全的技术。 我理解令牌需要随机生成和加密,所以我发现一个建议在UUID上使用MessageDigest的响应。 但是我发现更多的文章表明这​​可能不像我想的那样安全……有关生成cookie标记以存储在我的数据库中的安全方法的任何建议吗? 当我尝试使用UUID方法时,我遇到了如何将其放入我的数据库,因为我无法找到如何将其转换为字符串。 这是我的代码…… UUID uuid = UUID.randomUUID(); MessageDigest salt = MessageDigest.getInstance(“SHA-256”); salt.update(uuid.toString().getBytes(“UTF-8”));

这是一种安全的加密方法吗?

我正在编写一个Android应用程序,它使用对称密钥加密来保护敏感数据。 据我所知,Android只支持“PBEWithMD5AndDES”。 这个算法有多安全? 另外,我在下面包含了我的代码(非andriod)。 我的代码是否正确加密数据? import java.io.UnsupportedEncodingException; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecException; import java.security.spec.InvalidParameterSpecException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.SecretKeySpec; public class CipherTest { private static class EncryptInfo { private final byte[] encryptedData; private final byte[] initVector; private […]

点击率模式下的AES加密(Java)

我有这些信息: CTR键:36f18357be​​4dbd77f050515c73fcf9f2 CTR Ciphertext 1:69dda8455c7dd4254bf353b773304eec0ec7702330098ce7f7520d1cbbb20fc3 \ 88d1b0adb5054dbd7370849dbf0b88d393f252e764f1f5f7ad97ef79d59ce29f5f51eeca32eabedd9afa9329 请注意,16字节加密IV是随机选择的,并且是在密文之前。 并且在CTR模式下使用AES加密文本。 我必须发现明文为了做到这一点,我写了一个简短的Java程序,但它不起作用,我找不到原因:/ 这是Java程序 import java.nio.charset.Charset; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class AES { /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub //Dernier exemple CTR mode //Clé 16 bits byte[] keyBytes = new byte[] […]

使用Base64的AES会为同一纯文本生成不同的加密结果吗?

这是一个名为test()的示例虚拟代码,我运行了100K次,我得到了相同纯文本的不同加密消息(显然,我得到的解密是原始纯文本)。 我想这背后的原因是避免频率; 但是为什么一个解密会有多少加密呢? 不应该是一比一吗? public static void test() { String plainMessage = “I’m gonna bid 100 USD on this project”; String password = “A99922000001000004581F0F0CCD0000”; Set set = new HashSet(); for (int x=0; x”+set.size()); //just to make sure they are all unique } 加密 public static String encryptMessage(final String plainMessage, final String symKeyHex) { final byte[] […]

使用“RSA / ECB / PKCS7Padding”与Bouncy Castle

我尝试使用“RSA / ECB / PKCS7Padding”进行加密。 JCE不支持它。 所以我下载了Bouncy Castle,但似乎Bouncy Castle也不支持这种转变。 以下代码: Security.insertProviderAt(new BouncyCastleProvider(), 1); Cipher cipher = Cipher.getInstance(“RSA/ECB/PKCS7Padding”); 投 Caused by: java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/ECB/PKCS7Padding at javax.crypto.Cipher.getInstance(Cipher.java:524) …. Caused by: javax.crypto.NoSuchPaddingException: Unsupported padding PKCS7Padding at sun.security.pkcs11.P11RSACipher.engineSetPadding(P11RSACipher.java:129) at javax.crypto.Cipher$Transform.setModePadding(Cipher.java:360) at javax.crypto.Cipher.getInstance(Cipher.java:517) … 4 more 我做得对吗? TIA。

解密后几个字符丢失

这是我原来的xml: 12 Mickey Mouse 这是经过加密/解密过程后的输出 12 Mickey Mouse </ 如您所见,缺少一些字符。 这是我的代码。 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.CipherInputStream; import javax.crypto.CipherOutputStream; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.SecretKeySpec; public class Decrypter { /** * @param args * @throws IOException * @throws NoSuchPaddingException * @throws NoSuchAlgorithmException * […]

如何处理AES CTR的IV / Nonce / Counter?

import javax.crypto.Cipher; public abstract class Crypto { private static final String CIPHER_ALGORITHM = “AES/CTR/NoPadding”; private String AesKeyString = “ByWelFHCgFqivFZrWs89LQ==”; private void setKey() throws NoSuchAlgorithmException{ byte[] keyBytes; keyBytes = Base64.getDecoder().decode(AesKeyString); aesKey = new SecretKeySpec(keyBytes, “AES”); } protected byte[] execute(int mode, byte[] target, byte[] iv) throws Exception{ Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); IvParameterSpec ivSpec = new IvParameterSpec(iv); cipher.init(mode, […]

填充错误 – 在Java中使用AES加密和在C中使用解密时

我在解密rijndael’c’代码中的xl文件时遇到问题(该文件是通过JCE用Java加密的),这个问题只发生在具有公式的excel文件类型中。 保留所有文件类型加密/解密正常。 (如果我在java中解密相同的文件,输出就会好了。) 当我转储文件时,我可以看到java解密和’C’文件解密之间的区别。 od -c -b filename(以C语言解密的文件) 0034620 005 006 \0 \0 \0 \0 022 \0 022 \0 320 004 \0 \0 276 4 005 006 000 000 000 000 022 000 022 000 320 004 000 000 276 064 0034640 \0 \0 \0 \0 \f \f \f \f \f \f \f \f \f […]

使用密码短语的CBC的Java AES

我想用Java实现256密钥AES和CBC加密。 收件人发送了256位密码作为字符串’absnfjtyrufjdngjvhfgksdfrtifghkv’,它使用这个openssl命令完美地工作: echo test | openssl enc -aes-256-cbc -a -k ‘absnfjtyrufjdngjvhfgksdfrtifghkv’ base64格式的输出为:U2FsdGVkX1 / yA4J8T + i1M3IZS + TO / V29rBJNl2P88oI = 当我描述它时,它返回原始输入字符串: echo U2FsdGVkX1/yA4J8T+i1M3IZS+TO/V29rBJNl2P88oI= | openssl enc -d -aes-256-cbc -a -k ‘absnfjtyrufjdngjvhfgksdfrtifghkv’ 我的问题是我无法使我的加密工作在java中并使用上面的命令解密它。 我知道我的密钥应该使用我的密码生成。 下面是我的代码示例,其中IV是随机生成的,密钥是使用密码和随机盐生成的。 byte[] input = “test”.getBytes(); String passphrase = “absnfjtyrufjdngjvhfgksdfrtifghkv”; int saltLength = 8; SecureRandom random = new SecureRandom(); //randomly generate salt […]