كيفية تشفير وفك تشفير الملف في Android؟


Answers

كان لدي مشكلة مماثلة وللتشفير / فك التشفير توصلت إلى هذا الحل:

public static byte[] generateKey(String password) throws Exception
{
    byte[] keyStart = password.getBytes("UTF-8");

    KeyGenerator kgen = KeyGenerator.getInstance("AES");
    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
    sr.setSeed(keyStart);
    kgen.init(128, sr);
    SecretKey skey = kgen.generateKey();
    return skey.getEncoded();
}

    public static byte[] encodeFile(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;
    }

لحفظ ملف مشفر على sd تفعل:

File file = new File(Environment.getExternalStorageDirectory() + File.separator + "your_folder_on_sd", "file_name");
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
byte[] yourKey = generateKey("password");
byte[] filesBytes = encodeFile(yourKey, yourByteArrayContainigDataToEncrypt);
bos.write(fileBytes);
bos.flush();
bos.close();

لفك شفرة استخدام ملف:

byte[] yourKey = generateKey("password");
byte[] decodedData = decodeFile(yourKey, bytesOfYourFile);

للقراءة في ملف إلى صفيف بايت هناك طريقة مختلفة هناك. مثال: http://examples.javacodegeeks.com/core-java/io/fileinputstream/read-file-in-byte-array-with-fileinputstream/

Question

أرغب في تشفير الملف وتخزينه في بطاقة SD. أريد فك تشفير هذا الملف المشفر وتخزينه في بطاقة SD مرة أخرى. لقد حاولت تشفير الملف عن طريق فتح دفق الملف وتشفير لكنه لا يعمل. أريد فكرة عن كيفية القيام بذلك.




لدينا نفس المشكلة ، وحلها من قبل شخص ما في موضوع سؤالي. يجب عليك إلقاء نظرة على: CipherInputStream و CipherOutputStream. يتم استخدامها لتشفير وفك تشفير البايت. للحصول على التعليمات البرمجية المصدر التفصيلية تحقق من إجابة Kiril في هذا الارتباط: كيفية تشفير الملف من بطاقة SD باستخدام AES في Android؟




Links