Tag: 加密

将Ruby加密代码转换为Java

我在ruby中有遗留代码,使用OpenSSL进行加密 但是,我想用Java翻译它,我迷失了。 到目前为止,我最大的阻截者正在研究如何基于此代码生成IV。 任何帮助将不胜感激 def func_enc(data, key) cipher = OpenSSL::Cipher::Cipher.new(“aes-256-cbc”) cipher.encrypt cipher.pkcs5_keyivgen(key) cipher.update(data) encrypted_data << cipher.final return encryptedData end 编辑 为了澄清,我想使用Java Crypto。 这是我到目前为止提出的代码: SecretKeyFactory factory = SecretKeyFactory.getInstance(“PBKDF2WithMD5And256AES-CBC”); KeySpec spec = new PBEKeySpec(“Password”.toCharArray(), null, 2048, 256); 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(); […]

在java中解密AES加密文件

我有一个使用AES加密的java应用程序文件。 我还有一个加密的密钥文件。 但我无法理解如何使用密钥来解密文件。 大多数教程和示例创建临时随机密钥,加密文件并在一个地方解密。 那么,问题是如何指定一个必须用于解密的密钥? 编辑 :我发现的样本使用以下代码生成密钥。 我不知道我在哪里可以使用我的钥匙。 KeyGenerator kgen = KeyGenerator.getInstance(“AES”); kgen.init(128); SecretKey key = kgen.generateKey();

从字符串生成密钥?

我需要从字符串生成一个Key,这样我总是可以从同一个字符串创建相同的键。 (特别是一个Key对象,这样我就可以用它来创建一个Cipher来创建一个SealedObject) 这在Java中是否可行,我应该考虑使用哪种类/方法组合?

我如何在这里解密消息加密?

try{ String plainData=”my name is laksahan”,cipherText,decryptedText; KeyGenerator keyGen = KeyGenerator.getInstance(“AES”); keyGen.init(128); SecretKey secretKey = keyGen.generateKey(); Cipher aesCipher = Cipher.getInstance(“AES”); aesCipher.init(Cipher.ENCRYPT_MODE,secretKey); byte[] byteDataToEncrypt = plainData.getBytes(); byte[] byteCipherText = aesCipher.doFinal(byteDataToEncrypt); cipherText = new BASE64Encoder().encode(byteCipherText); System.out.println(cipherText); }catch(Exception e){ } 我也有解密代码,但我想使用cipherText的输出解密消息。 例如; 我的密文输出是uSG1OxJPywzU4JylpqgS6SoB9t21GZ4iN3bY2M6Qf10= 。 我想解密一下: uSG1OxJPywzU4JylpqgS6SoB9t21GZ4iN3bY2M6Qf10= 提前致谢。

Android中的RSA加密

我正在编写一个在Android中使用RSA的程序。 我有以下问题:我收到RSA密钥: KeyPair kp = kpg.genKeyPair(); publicKey = kp.getPublic(); privateKey = kp.getPrivate(); 使用加密函数加密测试字符串: String test =”test”; byte[] testbytes = test.getBytes(); Cipher cipher = Cipher.getInstance(“RSA”); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] cipherData = cipher.doFinal(testbytes); String s = new String(cipherData); Log.d(“testbytes after encryption”,s); 在解密function中,我正在解密数据以获得原始字符串 Cipher cipher2 = Cipher.getInstance(“RSA”); cipher2.init(Cipher.DECRYPT_MODE, privateKey); byte[] plainData = cipher.doFinal(cipherData); String p = new String(plainData); Log.d(“decrypted […]

在Java中对文件使用基于密码的加密

我正在尝试使用Java中的密码将一个文件的内容加密到另一个文件中。 该文件被读取到一个字节数组,加密到另一个字节数组,然后写入新文件。 不幸的是,当我尝试反转加密时,输出文件被解密为垃圾。 我强烈怀疑这个问题与每次使用相同的密码时生成相同的密钥有关。 我写了一个测试方法,只要生成一个密钥就会将密钥转储到文件中。 密钥以直接和编码forms记录。 前者每次都是相同的,但后者由于某种原因总是不同的。 老实说,我对加密方法知之甚少,特别是在Java方面。 我只需要数据具有中等安全性,并且加密不必承受具有大量时间和技能的任何人的攻击。 提前感谢任何有此建议的人。 编辑:Esailija很友好地指出我总是使用ENCRYPT_MODE设置密码。 我使用布尔参数更正了问题,但现在我得到以下exception: javax.crypto.IllegalBlockSizeException:使用填充密码解密时,输入长度必须是8的倍数 这听起来像密码短语没有被正确使用。 我的印象是“PBEWithMD5AndDES”会将其散列为一个16字节的代码,这肯定是8的倍数。我想知道为什么密钥生成并被用于加密模式,但是当它尝试时它会抱怨在完全相同的条件下解密。 import java.various.stuff; /**Utility class to encrypt and decrypt files**/ public class FileEncryptor { //Arbitrarily selected 8-byte salt sequence: private static final byte[] salt = { (byte) 0x43, (byte) 0x76, (byte) 0x95, (byte) 0xc7, (byte) 0x5b, (byte) 0xd7, (byte) 0x45, (byte) […]

MessageDigest的更新方法做什么以及BASE64Encoder的用途是什么?

以下是将加密用户字符串的代码: import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import sun.misc.BASE64Encoder; import java.io.*; class Encrypter { public synchronized String encrypt(String plainText) throws Exception { MessageDigest md = null; try { md = MessageDigest.getInstance(“SHA”); }catch(Exception exc) { throw new Exception(exc.getMessage()); } try { md.update(plainText.getBytes(“UTF-8”)); }catch(Exception exc) { throw new Exception(exc.getMessage()); } byte raw[] = md.digest(); String hash = […]

Golang中的AES加密和Java中的解密

我有以下用Golang编写的AES加密函数。 func encrypt(key []byte, text string) string { plaintext := []byte(text) block, err := aes.NewCipher(key) if err != nil { panic(err) } ciphertext := make([]byte, aes.BlockSize+len(plaintext)) iv := ciphertext[:aes.BlockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil { panic(err) } stream := cipher.NewCFBEncrypter(block, iv) stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext) return base64.URLEncoding.EncodeToString(ciphertext) } 我正在努力理解使用Java解密生成的文本的流程。 任何帮助将非常感谢! 这是Scala代码,不确定它的问题是什么。 def decode(input:String) […]

AES 256位加密 – java.security.InvalidAlgorithmParameterException:错误的IV长度:必须是16个字节长

以下是我的加密逻辑。 虽然我的IV是16字节长,但我仍然会收到无效IV长度的错误。 非常感谢任何帮助 @Override public String encrypt(String dataToEncrypt, String IV) throws Exception{ if(encryptionKey.length() < 10){ encryptionKey = generateEncryptionKey().toString(); } System.out.println("number of IV bytes is "+IV.length()+" "+IV); Cipher cipher = Cipher.getInstance(encrpytionAlgo); SecretKey key = new SecretKeySpec(encryptionKey.getBytes(Charset.forName("UTF-8")), "AES"); cipher.init(Cipher.ENCRYPT_MODE, key,new IvParameterSpec(IV.getBytes(Charset.forName("UTF-8")))); byte[] encryptedTextBytes = cipher.doFinal(dataToEncrypt.getBytes(Charset.forName("UTF-8"))); return new Base64().encodeAsString(encryptedTextBytes); } IV和密钥生成逻辑 @Override public String generateRandomIV(){ Random random = […]

Java AES CBC解密

PHP加密function $privateKey = “1234567812345678”; $iv = “1234567812345678”; $data = “Test string”; $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $privateKey, $data, MCRYPT_MODE_CBC, $iv); echo(base64_encode($encrypted)); Result: iz1qFlQJfs6Ycp+gcc2z4w== 当我尝试使用下面的函数在Java中解密此结果时,我得到的所有内容都是ì š@ÔBKxnfÈ~¯Ô’M而我期待“测试字符串”。 我错的任何想法? 谢谢 public static String decrypt() throws Exception{ try{ String Base64EncodedText = “iz1qFlQJfs6Ycp+gcc2z4w==”; String decodedText = com.sun.xml.internal.messaging.saaj.util.Base64.base64Decode(Base64EncodedText); String key = “1234567812345678”; String iv = “1234567812345678”; javax.crypto.spec.SecretKeySpec keyspec = new javax.crypto.spec.SecretKeySpec(key.getBytes(), “AES”); javax.crypto.spec.IvParameterSpec […]