Tag: 加密

如何解密用Laravel中的Crypt加密的Java(Android)文本?

我需要解密从服务器收到的一些数据,并且制作API的程序员将我引导到此Encrypter类,以查看他用于加密的内容。 现在基于该类,我发现使用的算法是AES128 CBC,并且我收到的字符串是Base64编码的并且包含其他数据,而不仅仅是密文。 即,如果我收到以下字符串: eyJpdiI6InJsSzRlU3pDZTBBUVNwMzdXMjVcL0tBPT0iLCJ2YWx1ZSI6Ik5JOENsSVVWaWk2RGNhNlwvWjJNeG94UzVkclwvMGJOREQreWUyS1UzclRMND0iLCJtYWMiOiJhZTZkYjNkNGM2ZTliNmU0ZTc0MTRiNDBmMzFlZTJhNTczZWIxMjk4N2YwMjlhODA1NTIyMDEzODljNDY2OTk2In0 在base64解码后,我得到: {“iv”:”rlK4eSzCe0AQSp37W25\/KA==”,”value”:”NI8ClIUVii6Dca6\/Z2MxoxS5dr\/0bNDD+ye2KU3rTL4=”,”mac”:”ae6db3d4c6e9b6e4e7414b40f31ee2a573eb12987f029a80552201389c466996″} 基于Encrypter类的line 99 ( iv = base64_decode($payload[‘iv’]); ),我对iv和value执行了另一个base64解码,得到了长度为16的iv 。我作为参数传递给了function如下: public static String decrypt(String iv, String encryptedData) throws Exception { byte[] keyValue = “zy2dEd1pKG5i3WuWbvOBolFQR84AYbvN”.getBytes(); Key key = new SecretKeySpec(keyValue, “AES”); Cipher c = Cipher.getInstance(“AES/CBC/PKCS7Padding”); c.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv.getBytes())); byte[] decordedValue = Base64.decode(encryptedData.getBytes(), Base64.DEFAULT); byte[] decValue = c.doFinal(decordedValue); return new String(decValue); […]

如何从url加密video并将加密video保存到设备的SD卡

在我的应用程序中,我必须使用许多video文件。 所有video的大约总大小为500 MB。 所以我必须在第一次安装应用程序时决定并运行该应用程序我在后台下载video,并在加密后将该video保存到设备的SD卡中。 当使用video时,我解密该video并使用它。 我决定这是因为所有video文件都非常重要,所以该文件的安全性非常重要。 我非常努力地找到如何加密video并将其保存到SD卡… 最后有一件事我发现我放在下面但在这段代码中出现了错误PERMISSION DENIED。 码: public class VideoActivity extends Activity { VideoView video_view; MediaController m_controller; MediaPlayer mplayer; String[] a = {“1″,”2″,”3″,”4″,”5″,”6”}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); try { main(a); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void writeToFile(String filename, Object […]

使用Blowfish错误进行加密和解密 – 使用填充密码解密时,输入长度必须是8的倍数

我能够加密数据但是在解密时我收到以下错误: 错误 HTTP Status 500 – Request processing failed; nested exception is javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) javax.servlet.http.HttpServlet.service(HttpServlet.java:621) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 这是我的加密和解密代码 //secret key 8 private static […]

如何在Java中生成一次密钥并在2个不同的程序中使用该密钥

我的目标是编写一个Java程序来使用AES algorithm加密文本文件( cipher text )。 然后,编写另一个程序来解密该加密文件( cipher text )以获取纯文本。 我想使用相同的密钥(相同的密钥,生成一次,保存在某处,并在加密和解密程序中使用它)进行加密和解密过程。 如果我生成密钥并在同一程序中逐行进行加密和解密,那么它可以完美地工作。 以下是该工作代码段: String strDataToEncrypt = new String(); String strCipherText = new String(); String strDecryptedText = new String(); KeyGenerator keyGen = KeyGenerator.getInstance(“AES”); keyGen.init(128); SecretKey secretKey = keyGen.generateKey(); Cipher aesCipher = Cipher.getInstance(“AES”); aesCipher.init(Cipher.ENCRYPT_MODE,secretKey); strDataToEncrypt = “any text input”; byte[] byteDataToEncrypt = strDataToEncrypt.getBytes(); byte[] byteCipherText = aesCipher.doFinal(byteDataToEncrypt); strCipherText […]

无法解密来自文本文件的密文,对称密钥工具。 在java中

所以基本上我的程序从用户选择的文本文件中加密/解密字符串。 他可以选择五种算法中的一种。 问题是当我用例如创建密文时。 AES,然后将此密文保存到文本文件,并希望解密它以获取它不起作用的原始字符串。 有人可以指出问题出在哪里吗? 例如:如果我使用AES加密String:“Hello World !!” 我得到这个密文:“1za7slAXv2KZvDlVZlzu / A ==”然后我将它保存到.txt并使用第二种方式进行解密以获得“Hello World !!” 背部。 但结果很糟糕。 我的方法好吗? 有更好的方法吗? 忘记添加导入:抱歉以前的格式。 import java.io.*; import java.util.Scanner; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.KeyGenerator; import java.security.spec.KeySpec; import java.security.spec.AlgorithmParameterSpec; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEParameterSpec; import javax.crypto.spec.PBEKeySpec; import javax.crypto.BadPaddingException; import java.io.IOException; import java.security.InvalidAlgorithmParameterException; import java.security.NoSuchAlgorithmException; import java.security.InvalidKeyException; import java.security.spec.InvalidKeySpecException; import javax.crypto.NoSuchPaddingException; import javax.crypto.IllegalBlockSizeException; […]

在Java中使用AES-128进行加密

我使用AES-128 / ecb / PKCS5Padding + base64对数据进行ecrypting有问题。 我使用以下代码加密我的数据: String input = “{\”action\”:\”getQuestion\”}”; String key = “4288f0b8060ca1b682bf795f2617cfdc”; byte[] data = input.getBytes(); byte[] encrypted = null; byte[] keyBytes = new BigInteger(key, 16).toByteArray(); SecretKeySpec keySpec = new SecretKeySpec(keyBytes, “AES”); Cipher cipher = Cipher.getInstance(“AES/ECB/PKCS5Padding”); cipher.init(Cipher.ENCRYPT_MODE, keySpec); encrypted = cipher.doFinal(data); System.out.println(Base64.encodeBytes(encrypted)); 我在加密后收到6GuKXA6FFR+yMmO8ksAEOLL5e574a5tLob7tt5IG+jk=但我无法使用PHP函数在服务器上解密。 当我使用PHP函数加密这些数据时: function encrypt($encrypt, $key=null) { $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, […]

在android上解密php加密数据

Android客户端(4.2.1)应用程序通过HttpPost请求将公钥发送到PHP (5.6)API。 此API使用符合AES RIJNDAEL_128对数据进行AES ,然后使用具有OpenSSL公共加密和RSA_PKCS1_OAEP_PADDING的客户端公钥加密AES加密的密钥。 它将通过XML编码的数据base64发送回客户端android应用程序,该应用程序将加密数据。 我已经设置了一个基本的PHP测试脚本来测试整个过程,这可以按预期工作。 目前我正在努力在客户端Android应用程序中实现解密,但已经解密AES密钥失败。 除了当前的问题,我还有其他问题(见最后)。 这是正在发生的事情的文本图形概要: client -> public key -> API -> data -> AESencrypt(data), RSAencrypt(AES-key) -> base64encode[AES(data)], base64encode[RSA(AES-key)] -> base64[AES(data)], base64[RSA(AES-key)] -> client -> base64[AES(data)], base64[RSA(AES-key)] -> base64decode[AES(data)], base64decode[RSA(AES-key)] -> AESdecrypt(data), RSAdecrypt(AES-key) -> data 我正在使用MCRYPT_RIJNDAEL_128加密数据,我读到这些数据与AES兼容(请参阅PHP doc for mycrypt )。 这是代码: <?php $randomBytes = openssl_random_pseudo_bytes(32, $safe); $randomKey = bin2hex($randomBytes); $randomKeyPacked […]

如何使用’-naltalt’参数解密AES加密文件

我是加密新手。 这个问题是我以前的问题。 我有一个用OpenSSL util加密的文件: openssl aes-256-cbc -in fileIn -out fileOUT -p -k KEY 我正在使用此代码来解密它: byte[] encrypted = IOUtils.toByteArray(inputStream); Security.addProvider(new BouncyCastleProvider()); String password = “abc”; Cipher c = Cipher.getInstance(“AES/CBC/PKCS5Padding”, “BC”); // Openssl puts SALTED__ then the 8 byte salt at the start of the // file. We simply copy it out. byte[] salt = new byte[8]; […]

密码垫块在姜饼上损坏

我相信这是来自androidsnippets.org的片段 – 为什么这不是Android 2.3上的function? 怎么解决? 错误 03-05 23:19:17.479: WARN/System.err(3598): javax.crypto.BadPaddingException: pad block corrupted 03-05 23:19:17.518: WARN/System.err(3598): at org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal(JCEBlockCipher.java:715) 03-05 23:19:17.518: WARN/System.err(3598): at javax.crypto.Cipher.doFinal(Cipher.java:1090) 我在这个主题上找到了几个答案,但我找不到一个合适的方法来解决这个问题,添加NoPadding参数或不同的算法或..? public static String code(String stringToCode) { try { stringToCode = encrypt(“somekey”,stringToCode); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return stringToCode; } public static String decode(String stringToDecode) […]

密码:IllegalBlockSizeException的原因是什么?

当我使用Cipher时,我观察到以下内容。 加密代码: Cipher aes = Cipher.getInstance(“AES”); aes.init(Cipher.ENCRYPT_MODE, generateKey()); byte[] ciphertext = aes.doFinal(rawPassword.getBytes()); 解密代码: Cipher aes = Cipher.getInstance(“AES”); aes.init(Cipher.DECRYPT_MODE, generateKey()); byte[] ciphertext = aes.doFinal(rawPassword.getBytes()); 在运行Decrypt代码时,我得到IllegalBlockSizeException(输入长度​​必须是16的倍数)。 但是,如果我将解密代码更改为 Cipher aes = Cipher.getInstance(“AES/ECB/PKCS5Padding”); //I am passing the padding too aes.init(Cipher.DECRYPT_MODE, generateKey()); byte[] ciphertext = aes.doFinal(rawPassword.getBytes()); 它工作正常。 我知道它是模式algorithm/mode/padding 。 所以我认为这是因为我没有提到填充。 所以我尝试在加密过程中给出模式和填充, 加密代码: Cipher aes = Cipher.getInstance(“AES/ECB/PKCS5Padding”);//Gave padding during encryption too […]