1

このコードを使用して、sd カードに保存されているアプリの xml ファイルを暗号化/復号化しようとしています。暗号化は正常に機能しますが、私が立ち往生しているのは復号化の部分です。

暗号化コード:

private void writeToFile(final String xmlString, final String exportFileName) throws IOException {
  File dir = new File(Environment.getExternalStorageDirectory(), BData.DATASUBDIRECTORY);
  if (!dir.exists()) {
     dir.mkdirs();
  }
  File file = new File(dir, exportFileName);
  file.createNewFile();

  BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
  try {
      String fileData = AdvancedCrypto.encrypt("myPassword", "mySalt"), xmlString.toString());
      bos.write(fileData.getBytes());
  }  catch (Exception e){
  } finally {
      if (bos != null) {
          bos.flush();
          bos.close();
      }
  }

}

復号化コード:

   public void getDataFromXML(Context context, String fileName){
       try
       {
           XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
           factory.setNamespaceAware(true);
           XmlPullParser _xml = factory.newPullParser();

            // get a reference to the file.
           File file = new File(Environment.getExternalStorageDirectory()
                    + File.separator + fileName);

            // create an input stream to be read by the stream reader.
           FileInputStream fis = new FileInputStream(file);

           BufferedInputStream buf = new BufferedInputStream(fis);

           int size = (int) file.length();
           byte[] contents = new byte[size];
           //byte[] data = buf.read(contents);

           String fileData = AdvancedCrypto.decrypt("myPassword", "mySalt"), contents.toString());
           buf.read(fileData.getBytes());

            // set the input for the parser using an InputStreamReader
           _xml.setInput(buf, HTTP.UTF_8);

           buf.close();

           int eventType = _xml.getEventType();
           boolean done = false;       

           //..rest of the code
           }
    }

このエラーがスローされます:

07-07 21:44:27.755: W/System.err(5608): Caused by: java.lang.StringIndexOutOfBoundsException: length=11; regionStart=0; regionLength=32
07-07 21:44:27.755: W/System.err(5608):     at java.lang.String.startEndAndLength(String.java:593)
07-07 21:44:27.755: W/System.err(5608):     at java.lang.String.substring(String.java:1474)

復号化メソッドの次の行:

String ivHex = encrypted.substring(0, IV_LENGTH * 2);

ファイルを正しく読み取って復号化していますか?

4

1 に答える 1