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

Reply via email to