Tag: 加密

Rijndael在Java中的支持

我们需要在Java中进行一些Rijndael开发。 对文章,图书馆等有什么建议可以帮助我们吗? 任何指向密钥库维护的指针以及如何安全地存储密钥? 编辑: 它需要是开源的。 从本质上讲,它只是使用Rijndael对数据进行标准加密/解密。

在Java中加密和在C#中解密为AES 256位

1.我有java函数加密xml文件并返回加密的String。 /// Java Class import java.security.Key; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; public class Crypt { public static String key = “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”; public static byte[] key_Array = Base64.decodeBase64(key); public static String encrypt(String strToEncrypt) { try { //Cipher _Cipher = Cipher.getInstance(“AES”); //Cipher _Cipher = Cipher.getInstance(“AES/ECB/PKCS5PADDING”); //Cipher _Cipher = Cipher.getInstance(“AES/CBC/PKCS5PADDING”); Key SecretKey = new SecretKeySpec(key_Array, “AES”); Cipher […]

试图了解Java RSA密钥大小

钥匙发生器的尺寸为1024,那么为什么印刷尺寸为635和162? import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; public class TEST { public static KeyPair generateKeyPair() throws NoSuchAlgorithmException, NoSuchProviderException { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(“RSA”, “BC”); keyPairGenerator.initialize(1024); return keyPairGenerator.generateKeyPair(); } public static void main(String[] args) throws Exception { KeyPair keyPair = generateKeyPair(); RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); RSAPublicKey publicKey = (RSAPublicKey) […]

BadPaddingException:解密错误

我正在编写一个程序,它从控制台输入 – 一个zip文件的名称,一个zip文件的名称,包含从第一个zip生成的(de / en)加密文件和一个包含公钥的文件。 解密时我得到exception: exception Exception in thread “main” javax.crypto.BadPaddingException: Decryption error at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:380) at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:291) at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:363) at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389) at javax.crypto.Cipher.doFinal(Cipher.java:2165) at com.Main.decrypt(Main.java:67) at com.Main.main(Main.java:201) 无法弄清楚为什么我得到这个例外? 公钥: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCE3pA746UfpC8sFk8ZJp0yupyJqj5jy6cjdxUYoP7mCm7c0mqQDeCcDNBYW2eSozCioPrH/9L+CDQEPLYakoem+jFnUKDH5+pru/0PJTJJF8Xh/ZT9eJlvsYBr1/qSfICf6RTs7kzwq9IuSZBw7/tfNEF9i0A8FVox6HOopXod1QIDAQAB 私钥: MIICXQIBAAKBgQCE3pA746UfpC8sFk8ZJp0yupyJqj5jy6cjdxUYoP7mCm7c0mqQDeCcDNBYW2eSozCioPrH/9L+CDQEPLYakoem+jFnUKDH5+pru/0PJTJJF8Xh/ZT9eJlvsYBr1/qSfICf6RTs7kzwq9IuSZBw7/tfNEF9i0A8FVox6HOopXod1QIDAQABAoGANOFrYBqK5lvu1koOswDWQZFZqcSSzh8IZyoGwGWa7S0r0EECXlDXmuPSq8e9IfRG8ALHrH+ZlrbnFOSgyVSWHfpj3aH+qknoSX5TW2rMQHih8865xuqheMQ+RTZ7+BRDqNsYkzxB/Z8mqzpoJQSYf+H7nWxdDCgAJVYZzxl3DmUCQQD32iEjnwiwUjii8slcmvCEZl+z84DWNdvJOg6Z38sI4AvrfpKc1WAcDg1rNZCKrRgokh54wpLt08cpFcrD04c3AkEAiTzDmc0bdgfg5wj6xHFZpYlBwiGm/bjOR2PS57P0GNU5PsDllRbFqIuzArITutO5lvZZImzuYz7Lf+cQ73pxUwJBAOdEwmdaneDo17A0m2+to3/nhqWDMVSwLMU3RyiNigZeCMFU+bkd4PBMrHi9IoJDwacZsRU9eZwxYEUV8H2Jg0ECQEEkOqRSm2pXKwX/WSjNtQPCNxhy6NUeV6vDUmTxIjh3XYjP/ynZeVEbnoj1BjB0N2/U11Jj6nPpZqb7gyppMEkCQQCoGdVYDipU+hMMnvxa0zOIyQc/a+HE0lESqn+2ZPafYi9Z1RldRMvUXhP8U7s+OuhRwprdw2ivvOFrnWyz9lL2 该程序的代码如下。 任何帮助都很受欢迎:) package com; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.security.GeneralSecurityException; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.PublicKey; […]

分解RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING

所以Java有一个名为RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING 。 那有什么意思? RFC3447 , 公钥加密标准(PKCS)#1:RSA加密规范版本2.1 ,第7.1.2节解密操作说Hash和MGF都是RSAES-OAEP-DECRYPT的选项。 MGF是它自己的function,在B.2.1节MGF1中定义,并且它也有自己的Hash“选项”。 也许RSAES-OAEP-DECRYPT和MGF1中的Hash“选项”应该是相同的,或者它们可能不是,我不清楚。 如果他们是那么我猜你有RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING这意味着sha256应该用于两者。 但如果它们不应该是相同的那么你可以将sha256用于RSAES-OAEP-DECRYPT,例如,sha1用于MGF1。 如果是这种情况那么sha256应该用于什么function呢? 什么哈希算法应该用于其他function? 欧洲央行在这方面的意义是什么? ECB是对称分组密码模式。 电子密码本。 也许它应该意味着Java如何处理比模数更大的明文? 就像将明文拆分成与模数一样大的块,然后用RSA加密每个块并将它们连接在一起? 我猜…

基于AES-256密码的Java加密/解密

我找到了一个用Java实现AES加密/解密的指南,并尝试理解每一行,因为我把它放到我自己的解决方案中。 但是,我并不完全理解它并因此而遇到问题。 最终目标是使用基于密码的加密/解密。 我已经阅读了关于此的其他文章/ stackoverflowpost,但大多数都没有提供足够的解释(我在Java中加密非常新) 我现在的主要问题是,即使我设置了byte[] saltBytes = “Hello”.getBytes(); 我到底仍然得到一个不同的Base64结果( char[] password每次都是随机的,但我读到以char[]forms保留密码更安全。我的另一个问题是当程序进入decrypt() ,我在byte[] saltBytes = salt.getBytes(“UTF-8”);得到一个NullPointerException byte[] saltBytes = salt.getBytes(“UTF-8”); 提前感谢您提供给我的任何帮助/建议。 有问题的代码: import java.security.AlgorithmParameters; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.SecretKeySpec; import javax.xml.bind.DatatypeConverter; public class EncryptionDecryption { private static String salt; private […]

使用Java中的RSA私钥加密

我正在尝试使用RSA私钥加密某些内容。 我正在关注这个例子: http : //www.junkheap.net/content/public_key_encryption_java 但转换它使用私钥而不是公共。 在这个例子之后,我认为我需要做的是: 读入DER格式的私钥 生成PCKS8EncodedKeySpec 从KeyFactory调用generatePrivate()来获取私钥对象 将该私钥对象与Cipher对象一起使用以进行加密 那么,步骤: 密钥是从openssl生成的: openssl genrsa -aes256 -out private.pem 2048 然后转换为DER格式: openssl rsa -in private.pem -outform DER -out private.der 我用以下代码生成PKCS8EncodedKeySpec: byte[] encodedKey = new byte[(int)inputKeyFile.length()]; try { new FileInputStream(inputKeyFile).read(encodedKey); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // […]

Java使用AES 256和128对称密钥加密

我是密码技术的新手。 我发现这段代码可以进行对称加密。 byte[] key = //… secret sequence of bytes byte[] dataToSend = … Cipher c = Cipher.getInstance(“AES”); SecretKeySpec k = new SecretKeySpec(key, “AES”); c.init(Cipher.ENCRYPT_MODE, k); byte[] encryptedData = c.doFinal(dataToSend); 它的工作。 在这里,我可以使用自己的密码。 这就是我需要的东西。 但我不知道如何做128或256 Symmetric Enctryption。 如何在代码中使用128和256键?

将.Net RSA xml密钥移植到Java

我有来自.Net系统的私有和公共密钥,采用xml格式。 我必须使用此密钥在Java中执行加密/解密。 有什么办法吗? 公钥看起来像这样: jHIxcGzzpByFv…pvhxFnP0ssmlBfMALis AQAB 私钥: 4hjg1ibWXHIlH…ssmlBfMAListzrgk= AQAB 8QZCtrmJcr9uW7VRex+diH…jLHV5StmuBs1+vZZAQ== 8CUvJTv…yeDszMWNCQ== elh2Nv…cygE3657AQ== MBUh5XC…+PfiMfX0EQ== oxvsj4WCbQ….LyjggXg== KrhmqzAVasx…uxQ5VGZmZ6yOAE= 我已经编写了一些代码来加密数据,但我不确定它是否正确。 Element modulusElem = root.getChild(“Modulus”); Element exponentElem = root.getChild(“Exponent”); byte[] expBytes = decoder.decodeBuffer(exponentElem.getText().trim()); byte[] modBytes = decoder.decodeBuffer(modulusElem.getText().trim()); RSAPublicKeySpec keySpec = new RSAPublicKeySpec(new BigInteger(1, modBytes), new BigInteger(1, expBytes)); KeyFactory fact = KeyFactory.getInstance(“RSA”); PublicKey pubKey = fact.generatePublic(keySpec); 如何从xml创建私钥来解密数据?

使用Java加密和解密:无法获得相同的输出

我正在尝试学习和测试java 1.6加密/解密API。 我想知道我做错了什么以及我在知识方面缺少什么。 在下面的代码中,我创建了两个密码:一个用于加密,另一个用于解密。 当我使用这些密码时,我使用不同的SecretKey初始化它们,但我仍然能够获得相同的值。 为什么是这样? String algorithm = “DES”; SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(algorithm); byte[] encBytes = “12345678”.getBytes(“UTF8”); byte[] decBytes = “56781234”.getBytes(“UTF8”); DESKeySpec keySpecEncrypt = new DESKeySpec(encBytes); DESKeySpec keySpecDecrypt = new DESKeySpec(decBytes); SecretKey keyEncrypt = keyFactory.generateSecret(keySpecEncrypt); SecretKey keyDecrypt = keyFactory.generateSecret(keySpecDecrypt); Cipher cipherEncrypt = Cipher.getInstance(algorithm); Cipher cipherDecrypt = Cipher.getInstance(algorithm); String input = “john doe”; cipherEncrypt.init(Cipher.ENCRYPT_MODE, keyEncrypt); […]