Tag: 加密

用Java测试加密和解密的单元

免责声明,我是iOS开发人员,一直在使用Android上的加密技术。 目前我已经设法在Android中实现加密,但我问自己一个单元如何测试加密和解密数据? 现在想到的第一个想法是: String encryptedInputData = encryptedInputData(“Hello”); String decryptedData = decryptData(encryptedInputData); Assert.assertEquals(decryptedData,”Hello”); 然而,这个测试提出了一个缺陷……如果在encryptedInputData和decryptData方法中确实发生了某些变化,那么这个测试就不会告诉它改变了什么以及为什么它现在正在破坏。 所以我想编写更细粒度的测试。 所以例如给出这个代码: Cipher cipher = Cipher.getInstance(“RSA/ECB/NoPadding”); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] data = cipher.doFinal(message); 我想确保cipher变量在ECB模式下使用RSA算法而没有填充。 我想测试.doFinal(message)中的.doFinal(message)遵循特定格式等。 现在我想象我能够模拟Cipher类,这里的问题是编写的加密和解密,仅作为Util类,并且能够对此进行unit testing,我将不得不通过模拟Cipher进入代码,假设这是一个Util类似乎会变得混乱,即我必须创建一个init方法只是为了unit testing目的或创建setter方法只是为了unit testing这个。 这将允许我对代码进行unit testing,但然后Util类使用我实际上不需要用于生产目的的代码变得笨拙。 是否有任何优雅的方式可以像这样unit testing场景? 即encryptedInputData和decryptData是公共方法,但这些方法使用各种私有方法,坦率地需要进行unit testing,问题是如何?

openssl_encrypt java中的256 CBC raw_data

我尝试在java 6中使用OPENSSL_RAW_DATA执行PHP openssl_encrypt aes-256-cbc但没有成功。 我找到了一些关于这个的话题,但我只是在没有raw_data的aes-128-cbc中成功了。 我创建的关于它的最佳主题是: AES-256 CBC在php中加密并在Java中解密,反之亦然但是raw_data不起作用,256位密钥是随机生成的。 实际上Php版本是: openssl( “hello”, “aes-256-cbc”, “bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb”, OPENSSL_RAW_DATA, “aaaaaaaaaaaaaaaa” ) ?> 我实际上有这个: public static void main(String[] args) { try { // 128 bits key openssl_encrypt(“hello”, “bbbbbbbbbbbbbbbb”, “aaaaaaaaaaaaaaaa”); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static String openssl_encrypt(String data, String strKey, String strIv) […]

Java中的AES PBE加密/ Ruby中的Decrypt

使用Bouncy Castle PBEWITHSHA256AND128BITAES-CBC-BC算法加密Java中的字符串数据。 很难在ruby中解密它。 我已经看到了一些类似操作的例子,但是没有java PBEKeySpect被腌制的情况(当然不确定是否存在问题)。 对于某些上下文,这里是Java代码; SecretKeyFactory factory = SecretKeyFactory.getInstance(“PBEWITHSHA256AND128BITAES-CBC-BC”, org.spongycastle.jce.provider.BouncyCastleProvider.PROVIDER_NAME); KeySpec spec = new PBEKeySpec(“password”.toCharArray(), “8 bytes!”, 1024, 128); SecretKey tmp = factory.generateSecret(spec); SecretKey secret = new SecretKeySpec(tmp.getEncoded(), “AES”); Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”); cipher.init(Cipher.ENCRYPT_MODE, secret); AlgorithmParameters params = cipher.getParameters(); byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV(); byte[] cipherText = cipher.doFinal(“hello world”.getBytes()); 这没有问题。 然而,我们还没有发现在Ruby端解密它的神奇序列。 如果有人愿意在ruby(1.9.3)中分享如何解密这个的例子,我将不胜感激。 UPDATE 下面是ruby中目前无法正常工作的解密代码。 […]

AES算法Java / Java Script中的128位密钥问题

我需要使用用户选择密钥加密我的Java代码中的值,并解密Java脚本模块中的值。 下面是我加密值的Java代码。 这里我从用户选择键生成128位密钥值,同样用于加密值。 String plainText = “Hello, World! This is a Java/Javascript AES test.”; try { byte[] rawKey = getRawKey(“12345”.getBytes()); SecretKey key = new SecretKeySpec(rawKey, “AES”); AlgorithmParameterSpec iv = new IvParameterSpec( Base64.decodeBase64(“5D9r9ZVzEYYgha93/aUK2w==”)); Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”); cipher.init(Cipher.ENCRYPT_MODE, key, iv); System.out.println(Base64.encodeBase64String(cipher .doFinal(plainText.getBytes(“UTF-8”)))); } catch (Exception e) { e.printStackTrace(); System.out.println(“Exception in crypto…”); } public static byte[] getRawKey(byte[] […]

加密/解密:HMAC标签在解密方法中不匹配

我正在尝试编码加密和解密消息的加密和解密方法。 在encrypt方法中,它将接受一个字符串。 它将读入公钥并用于RSA密码。 然后,将使用具有AES密钥和IV的AES密码对消息进行加密。 然后,通过使用HMAC密钥,使用密文加密的AES生成HMAC标签。 AES密钥和HMAC密钥连接在一起并由RSA Cipher加密。 该方法将返回一个JSONObject,其中包含:RSA密文,AES密文,AES IV和HMAC标记。 它们是转换为hex字符串的字节数组。 在decrypt方法中,它将接收将被解析的JSON对象。 它将读入将在RSA密码中使用的私钥。 RSA密码将用于解密连接密钥。 解密后,密钥将分为AES密钥和HMAC密钥。 然后,将在AES密文上生成新的HMAC标记。 比较加密标签和新标签。 如果它们相等,则解密AES密文并获取消息。 当我运行我的代码时,没有错误,但它没有解密,因为2个标签不匹配。 我不知道为什么。 公钥和私钥是从.pem文件转换而来的.der文件。 请帮帮我。 谢谢! import java.security.*; import java.security.spec.*; import javax.crypto.*; import java.io.*; import java.nio.file.Files; import java.nio.file.Paths; import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.IvParameterSpec; import org.json.*; import javax.xml.bind.DatatypeConverter; public class CryptographicTools { /** * This method encrypts a message * @param […]

通过URLCassloader加载加密的JarFile

我一直在编写一个小系统来动态加载AES加密的jar文件。 我的代码: public static void main(String args[]) throws Exception { String jar = “http://site.com/api/rsc/test.jar”; List urls = new ArrayList(); urls.add(getURL(jar)); URL jarurl = urls.get(0); ObjectInputStream ois = new ObjectInputStream((new URL(“http://site.com/api/rsc/key_1.txt”).openStream())); Object o = ois.readObject(); DESKeySpec ks = new DESKeySpec((byte[])o); SecretKeyFactory skf = SecretKeyFactory.getInstance(“DES”); SecretKey key = skf.generateSecret(ks); Cipher c = Cipher.getInstance(“DES/CFB8/NoPadding”); c.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec((byte[]) […]

如何解密javascript中的文件,该文件由JAVA用AES加密

我用AES256加密了Java中的JPG文件,但不知道用javascript解密JPG文件。 谁有更好的主意? 我正在苦苦挣扎4天。 byte[] ivBytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; String key = “1234567890123456789012345678901d”; AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivBytes); SecretKeySpec newKey = new SecretKeySpec(key.getBytes(“UTF-8”), “AES”); Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”); cipher.init(mode, newKey, ivSpec); InputStream input = null; OutputStream output = null; try […]

使用AES-128算法加密Java中的Excel文件和C#中的解密

我试图用Java加密excel文件,然后用C#解密,但解密文件显示垃圾字符。 我能够在Java中加密.txt和.docx文件,在C#中解密而没有任何问题。 请检查代码并告诉我,如果我做错了什么? 甚至让我知道是否需要添加任何东西。 Java代码加密xls文件 // file to be encrypted File file = new File(“D:\\SynchData\\output.xls”); FileInputStream inFile = new FileInputStream(file); FileOutputStream outFile = new FileOutputStream(“D:\\SynchData\\output.dec”); // password to encrypt the file String password = “MAKV2SPBNI99212”; // password, iv and salt should be transferred to the other end // in a secure manner // salt is […]

Java类中RSA加密的问题

public class MyEncrypt { public void saveToFile(String fileName, BigInteger mod, BigInteger exp) throws IOException { ObjectOutputStream oout = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(fileName))); try { oout.writeObject(mod); oout.writeObject(exp); } catch (Exception e) { throw new IOException(“Unexpected error”, e); } finally { oout.close(); } } public static void main(String[] args) throws Exception { MyEncrypt myEncrypt = new MyEncrypt(); […]

使用AES / ECB / NoPadding进行加密/解密

以下是我的加密/解密方法: private String decrypt_data(String encData) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { String key = “bad8deadcafef00d”; SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), “AES”); Cipher cipher = Cipher.getInstance(“AES/ECB/NoPadding”); cipher.init(Cipher.DECRYPT_MODE, skeySpec); System.out.println(“Base64 decoded: “+Base64.decode(encData.getBytes()).length); byte[] original = cipher.doFinal(Base64.decode(encData.getBytes())); return new String(original).trim(); } private String encrypt_data(String data) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { String key = “bad8deadcafef00d”; SecretKeySpec […]