如何解密使用Java代码加密的字符串?

时间:2014-06-09 11:09:56

标签: java ruby encryption aes

我不确定我是否可以提出这样的问题。如果这不适合,我道歉。

我需要解密一些使用以下Java代码加密的数据。我安装了aes gem并且挣扎了2个小时但是无法做到。

我知道ruby,但我的Java知识有限。给我这个代码的另一个人并不认识ruby。所以我需要你的帮助。我只需要一个解密功能。​​

出于安全原因,我更改了密钥。

import javax.crypto.Cipher;         
import javax.crypto.spec.SecretKeySpec;         

import org.apache.commons.codec.DecoderException;           
import org.apache.commons.codec.binary.Hex;         

import sun.misc.BASE64Decoder;          
import sun.misc.BASE64Encoder;          


public class AESTest {          
    private static String sKeyString = "29c4e20e74dce74f44464e814529203a";      
    private static SecretKeySpec skeySpec = null;       

    static {        
        try {   
            skeySpec = new SecretKeySpec(Hex.decodeHex(sKeyString.toCharArray()), "AES");
        } catch (DecoderException e) {  
            e.printStackTrace();
        }   
    }       

    public static String encode(String message) {       
        String result = ""; 

        try {   
            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
            byte[] encrypted = cipher.doFinal(message.getBytes("UTF-8"));
            result =  (new BASE64Encoder()).encode(encrypted);
        } catch (Exception e) { 
            e.printStackTrace();
        }   

        return result;  
    }       

    public static String decode(String message){        
        String result = ""; 
        try {   
            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            byte[] encrypted = (new BASE64Decoder()).decodeBuffer(message);
            byte[] original = cipher.doFinal(encrypted);
            result = new String(original,"UTF-8");
        } catch (Exception e) { 
            e.printStackTrace();
        }   

        return result;  
    }       

    public static void main(String[] args) {        
        String message = "SOME TEST";   
        System.out.println("message : "+message);   
        String encodeString = encode(message);  
        System.out.println("encrypted string: " + encodeString);    
        String original = decode(encodeString); 
        System.out.println("Original string: " + original); 
    }       
}           

感谢。

萨姆

1 个答案:

答案 0 :(得分:0)

sKeyString变量具有十六进制键值。

要解码,首先需要使用Base64解码来获取带有加密消息的字节数组。 然后你可能需要对密钥进行十六进制解码以获得密钥的字节。这很简单,sKeyString中每2个字符就是一个字节。然后使用AES解密器用该密钥解密消息字节。