输入一个密码,对文件进行简单的加密,再保存,可以输入密码再解密
public static String readString(String fileName, Boolean bEn)
throws IOException {
File file = new File(fileName); BufferedReader bf = new BufferedReader(new FileReader(file)); String content = "";
StringBuilder sb = new StringBuilder(); if (bEn) {
while (content != null) {
content = bf.readLine();
String str = "";
for (int i = 0; i < content.length(); i++) {
str += content.charAt(i) + 3;
} content = str;
if (content == null) {
break;
}
content = str; sb.append(content);// .trim());
}
} else {
while (content != null) {
content = bf.readLine();
String str = "";
for (int i = 0; i < content.length(); i++) {
str += content.charAt(i) - 3;
}
if (content == null) {
break;
}
sb.append(content);// .trim());
}
} bf.close();
fileOperation.writeBytes(fileName, sb.toString());
return sb.toString(); } public static int writeBytes(String file, String string) {
java.io.ObjectOutputStream out;
try {
out = new java.io.ObjectOutputStream(new java.io.FileOutputStream(
file));
out.writeObject(string);
out.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return -1;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return -2;
} return 0;
}
怎么加快速度,只要简单的加密就可以

解决方案 »

  1.   

    你这样是加密文件所有字节 当然会慢 建议你看看 RandomAccessFile 这个java类 在io包中 名字我不知道可写错了 这个类有个功能是可以跳跃一定字节数 对下个字节加密 你可以google下
    这样你加密的内容就少了 虽然只是加密了一部分字节 但是却改变了文件整体 也是加密了,解密的道理是一样的你这个加密本身的问题 还有 如果你的文件过大  这样是会报OOM 错误的;所以 简单加密 推荐你用 RandomAccessFile!
      

  2.   


    static final byte[] KEYVALUE = "6^)(9-p35@%3#4S!4S0)$Y%%^&5(j.&^&o(*0)$Y%!#O@*GpG@=+@j.&6^)(0-=+" .getBytes(); static final int BUFFERLEN = 1024; static final long DIVISION=2560L;
    public static void encryptFile(String file, String password) throws Exception { // ÃÜÂëµÄ×ÖœÚÊý×é ÓÃÀŽÒì»ò²Ù×÷ byte[] PASSVALUE = password.getBytes(); int papos = 0; for (int i = 0; i < KEYVALUE.length; i++) { KEYVALUE[i] ^= PASSVALUE[papos]; papos++; if (papos == PASSVALUE.length) papos = 0; } //ÿŽÎÌøÔŸµÄ×ÖœÚÊý long skippos = 0L; RandomAccessFile raf = new RandomAccessFile(file, "rw"); System.out.println(">>>>>>length:"+raf.length()); long limits=raf.length()/DIVISION;//žùŸÝÎÄŒþµÄ²»Í¬ŽóСÀŽÈ·¶šÌøÔŸµÄ×֜ڳ€¶È skippos=limits; int c, pos, keylen; pos = 0; keylen = KEYVALUE.length; byte buffer[] = new byte[BUFFERLEN]; /*¶ÁÈ¡cžö×֜ںó£¬ÔÙœ«ÖžÕë»ØÍ˵œ¶ÁÈ¡Ç°µÄλÖ㬜«¶ÁÈ¡µÄ×֜ڜøÐвÙ×÷ºóÖØР * ŽÓžÃÖžÕë³öÐŽÈë ž²žÇÔ­ÄÚÈÝ£¬œÓ×ÅÖžÕëseekµœÏÂһλÖàÖØžŽÑ­»·*/ while ((c = raf.read(buffer)) != -1) { raf.seek(raf.getFilePointer() - c); //ÌøÔŸÐÔÒì»ò×֜ڠŒõС»š·ÑʱŒä for (int i = 0; i < c; i+=10) { buffer[i] ^= KEYVALUE[pos]; pos++; if (pos == keylen) pos = 0; } //ÐŽÈëcžö×֜ڠÉáÆúwrite(buffer)·œ·šÊÇÒòΪСÎÄŒþµÄŽóС²»ÊÇÕûÊýKB µŒÖÂÐŽÈë×֜ڹý¶à raf.write(buffer,0,c); if (raf.length() > skippos) { raf.seek(skippos); skippos += limits; } } // ¹Ø±ÕŽò¿ªµÄÁ÷ raf.close(); }
    我以前做过的 一个 这个是加密的方法 解密是一模一样的  有些乱码 都是注释 没什么关系 
    你自己看着改一改吧
      

  3.   

    可否借鉴一下:http://www.jspweb.org/index.php/file-encryption-and-decryption-operations-java-source
      

  4.   

    的确 简单的加密 就是异或方法加密本身就存在这个问题,不然你可以将密码再加密储存 解密时做验证密码操作;不过怎么存储 就要看你自己了,如果是android 你可以用文件 用preference;数据库 都行 自己看着办了