密码解码在Android中返回一个空数组

时间:2016-01-15 08:55:50

标签: android encryption

我想在Android中对文件进行编码和解码,但是当我尝试解密某些文件时,它会返回一个空的字节数组。

我用来加密文件并解密的类:

public class CrytedClass {
    public static byte[] generateKey(String pass) throws Exception{
        byte [] start = pass.getBytes("UTF-8");
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");

        sr.setSeed(start);
        kgen.init(128,sr);
        SecretKey skey = kgen.generateKey();
        return skey.getEncoded();
    }

    public static byte[] encodedFile(byte[] key, byte[] fileData)throws Exception{
        SecretKeySpec skeySpec = new SecretKeySpec(key,"AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE,skeySpec);
        byte [] encrypted = cipher.doFinal(fileData);
        return encrypted;

    }
    public static byte[] decodeFile(byte[] key, byte[] fileData) throws Exception{
        SecretKeySpec skeySpec = new SecretKeySpec(key,"AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE,skeySpec);
        byte [] decrypted = cipher.doFinal(fileData);
        return decrypted;
    }

    public static String generatePass(){
        return new BigInteger(130, new SecureRandom()).toString(32);

    }
    public static byte[] createHas(byte[] ficheroEncrip){
        MessageDigest msd = null;
        try{
            msd = MessageDigest.getInstance("SHA-1");
        }catch (Exception e){
            return null;
        }
        msd.update(ficheroEncrip);
        return msd.digest();
    }
}

我使用的测试代码。

    try {
            String id1 = CrytedClass.generatePass();
            byte[] secure = CrytedClass.generateKey(id1);
            byte[] FileEncoded = CrytedClass.encodedFile(secure, ous.toByteArray());
            byte[] decoded = CrytedClass.decodeFile(secure, FileEncoded);
            File decodedFile = new File(Environment.getExternalStorageDirectory()+"/decoded.pdf");
            FileOutputStream pdfFile = new FileOutputStream(decodedFile);
            pdfFile.write(decoded);
            System.out.println("Final del test");
            Boolean r = pdfFile.equals(original);
}catch(Exception e){

}

感谢您的帮助

0 个答案:

没有答案