A good rule to follow is that you should never, ever, call the getBytes() method, nor any method or constructor in the SDK that has a variant that takes a character encoding. I've fixed an incredible number of bugs from this cause.
You almost always want to supply "UTF-8" as that encoding, too. On Jul 19, 12:57 pm, sblantipodi <[email protected]> wrote: > Ok I solved with correct byte encoding... > Thread closed. > > On Jul 19, 7:31 pm, sblantipodi <[email protected]> wrote: > > > > > OK... > > I'm using this class to encrypt/decrypt in android. > > public class SimpleCrypto { > > > 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)); > > } > > > } > > > Now what I have understood is that I need to pass a base64 string to > > PHP to get it working. > > I'm able to do this in PHP, but I haven't understood what I need to > > convert in BASE64. > > If I convert into base64 the string outputted from String > > encrypt(String seed, String cleartext) > > PHP get a junk data when decrypting the string with mcrypt. > > Have you got some idea? -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

