1

画像を暗号化および復号化したい、

アクティビティには、暗号化と復号化のための2つのボタンがあります

主な活動は

    ctx = this;

     btn_Dec = (Button)findViewById(R.id.btn_Dec);
            btn_In = (Button)findViewById(R.id.btn_In);
            btn_Dec.setOnClickListener(btnDecListner);
            btn_In.setOnClickListener(btnInListner);

        }


        public OnClickListener btnInListner = new OnClickListener() {

            public void onClick(View v) {
                CryptClass simpleCrypto = new CryptClass();
                 System.out.println("Start Encrypting");
                try {
                    // encrypt audio file send as second argument and corresponding key in first argument.
                      incrept = simpleCrypto.encrypt(KEY, getImageFile());

                      //Store encrypted file in SD card of your mobile with name vincent.mp3.
                    FileOutputStream fos = new FileOutputStream(new File("/sdcard/abc.jpg"));
                       fos.write(incrept);
                       fos.close();

                } catch (Exception e) {  
                    e.printStackTrace();
                }
            }
        };


           public OnClickListener btnDecListner = new OnClickListener() {

                public void onClick(View v) {
                    CryptClass simpleCrypto = new CryptClass();

                    try {

                        // decrypt the file here first argument is key and second is encrypted file which we get from SD card.
                        decrpt = simpleCrypto.decrypt(KEY, getImageFileFromSdCard());

                        //play decrypted audio file.
                        ///playMp3(decrpt);

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } 
            };

            /**
             * 
             * @return byte array for encryption.
             * @throws FileNotFoundException
             */

        public byte[]   getImageFile() throws FileNotFoundException
            {
              byte[] Image_data = null;
              byte[] inarry = null;

               AssetManager am = ctx.getAssets();
                try {
                    InputStream is = am.open("abc.jpg "); // use recorded file instead of getting file from assets folder.
                    int length = is.available();
                    Image_data = new byte[length];

                    int bytesRead;
                    ByteArrayOutputStream output = new ByteArrayOutputStream();
                    while ((bytesRead = is.read(Image_data)) != -1)
                    {
                        output.write(Image_data, 0, bytesRead);
                    }
                  inarry = output.toByteArray();

                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            return inarry;
            }

        /**
         * This method fetch encrypted file which is save in sd card and convert it in byte array after that this  file will be decrept.
         * @return byte array of encrypted data for decription.
         * @throws FileNotFoundException
         */
        public byte[]   getImageFileFromSdCard() throws FileNotFoundException
        {

          byte[] inarry = null;

            try {
                //getting root path where encrypted file is stored.
                File sdcard  = Environment.getExternalStorageDirectory();
                File file = new File(sdcard,"abc.jpg"); //Creating file object

                //Convert file into array of bytes.
                FileInputStream fileInputStream=null;
                byte[] bFile = new byte[(int) file.length()]; 
                fileInputStream = new FileInputStream(file);
                fileInputStream.read(bFile);
                fileInputStream.close();
                inarry = bFile;

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        return inarry;
        }

また、キーの生成、暗号化、復号化、およびそれらすべての操作を実行する別のクラスがあります...

public  byte[] encrypt(String seed, byte[] cleartext) throws Exception {

    byte[] rawKey = getRawKey(seed.getBytes());
        byte[] result = encrypt(rawKey, cleartext);
      //  return toHex(result);
        return result;
}

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

        return result;
}

//done
private  byte[] getRawKey(byte[] seed) throws Exception {
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
        sr.setSeed(seed);
    kgen.init(128, sr); 
    SecretKey skey = kgen.generateKey();
    byte[] raw = skey.getEncoded();
    return raw;
} 


private  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  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;
}

アセットにファイルが見つからないというエラーが表示されます...すでにabc.jpgファイルをアセットフォルダーに配置しました

4

2 に答える 2

1

次の行に余分な空白があります、

am.open("abc.jpg ");
于 2013-01-04T09:17:03.997 に答える
1

を使用して問題を解決しました

      InputStream is = getAssets().open("abc.jpg");
于 2013-01-04T09:32:20.120 に答える