0
public void handleResult(Result result) {    

    final String scanResult = result.getText();    
    Log.e("QRCode:", scanResult);   

    String normalTextDec = null;
    try {
        normalTextDec = AESHelper.decrypt(seedValue, scanResult);
        Log.e("Decrypt:",normalTextDec);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

In the above code "scanResult" is the encrypted String. I wanted to decrypt it. When I am printing scanResult on the console it is giving the correct encrypted String but decryption is not working. Can anyone solve this? And I am using AESHelper class for this.

AESHelper class:

public class AESHelper {

    public static String encrypt(String seed, String cleartext) throws Exception {
        byte[] rawKey = getRawKey(seed.getBytes());
        byte[] result = encrypt(rawKey, cleartext.getBytes());
        return toHex(result);
    }

    public static String decrypt(String seed, String encrypted) throws Exception {
        byte[] rawKey = getRawKey(seed.getBytes());
        byte[] enc = toByte(encrypted);
        byte[] result = decrypt(rawKey, enc);
        return new String(result);
    }

    private static byte[] getRawKey(byte[] seed) throws Exception {
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
        sr.setSeed(seed);
        kgen.init(128, sr); // 192 and 256 bits may not be available
        SecretKey skey = kgen.generateKey();
        byte[] raw = skey.getEncoded();
        return raw;
    }

    private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        byte[] encrypted = cipher.doFinal(clear);
        return encrypted;
    }

    private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, skeySpec);
        byte[] decrypted = cipher.doFinal(encrypted);
        return decrypted;
    }

    public static String toHex(String txt) {
        return toHex(txt.getBytes());
    }

    public static String fromHex(String hex) {
        return new String(toByte(hex));
    }

    public static byte[] toByte(String hexString) {
        int len = hexString.length()/2;
        byte[] result = new byte[len];
        for (int i = 0; i < len; i++)
            result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();
        return result;
    }

    public static String toHex(byte[] buf) {
        if (buf == null)
            return "";
        StringBuffer result = new StringBuffer(2*buf.length);
        for (int i = 0; i < buf.length; i++) {
            appendHex(result, buf[i]);
        }
        return result.toString();
    }

    private final static String HEX = "0123456789ABCDEF";
    private static void appendHex(StringBuffer sb, byte b) 
    {
        sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
    }
}
6
  • Provide the encryption code and expected inputs and outputs. Read the help center. Commented Jan 29, 2018 at 6:58
  • what error or message you receive when you try to decrypt? Commented Jan 29, 2018 at 7:04
  • It doesn't produce any error. In my opinion the try block is not getting executed. @GaneshKarewad Commented Jan 29, 2018 at 7:29
  • Sir actually encryption is getting done in one project and decryption is getting done in different project. I am retrieving the encrypted string from the database into a String i.e.,"scanResult" as described in the code. @LukeJoshuaPark Commented Jan 29, 2018 at 7:30
  • Are you encrypt and decrypt on the same platform? Fyi, SHA1PRNG may not return same value on different platform. For example, stackoverflow.com/questions/9728538/… Commented Jan 29, 2018 at 10:27

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.