J2ME手机文件加密

时间:2021-05-10 03:23:28

最近刚刚学习J2ME  真可惜 J2ME的类太少 功能太弱了!哎~..... 而且什么东西都受安全限制,不过也有很多因素是硬件方面的!而且当 CLASS访问本地文件的时候,需要在文件访问权限那里开启

J2ME手机文件加密

package cn.isto;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;
/**
 *
 * @author Administrator
 */
public class EncryptTool extends MIDlet implements CommandListener {
   
    /** Creates a new instance of HelloMidlet */
    public EncryptTool() {
    }
   
    private Form Encrypt;                    
    private Command exitCommand;
    private TextField filepath;
    private TextField enterpass;
    private TextField againpass;
    private ChoiceGroup choiceTypeGroup;
    private Command okCommand;
    private TextField outputPath;
    private Spacer spacer1;
    private Gauge gauge1;
    private Ticker tickerMsg;                  

                    

    /** This method initializes UI of the application.                       
     */
    private void initialize() {                     
 // Insert pre-init code here
        getDisplay().setCurrent(get_Encrypt());                     
 // Insert post-init code here
    }                    
   
    /** Called by the system to indicate that a command has been invoked on a particular displayable.                     
     * @param command the Command that ws invoked
     * @param displayable the Displayable on which the command was invoked
     */
    public void commandAction(Command command, Displayable displayable) {                   
        // Insert global pre-action code here
        if (displayable == Encrypt) {                    
            if (command == exitCommand) {                  
                // Insert pre-action code here
                exitMIDlet();                      
                // Insert post-action code here
            } else if (command == okCommand) {                    
                tickerMsg.setString("kj021320简单加密程序");
                String operateFile=filepath.getString();
                String outputFile=outputPath.getString();
                InputStream fileR=null;
                OutputStream fileW=null;
                if((operateFile!=null&&!"".equals(operateFile))&&(outputPath!=null&&!"".equals(outputPath))){
                    if(enterpass.getString().equals(againpass.getString())){
                        int pas=getPass(enterpass.getString());
                        try {
                            fileR=Connector.openInputStream(operateFile);
                            fileW=Connector.openOutputStream(outputFile);
                            int b=fileR.read();
                            int xorB=0;
                            while(b!=-1){
                                xorB= b ^ pas;
                                fileW.write(xorB);
                                b=fileR.read();
                            }
                            tickerMsg.setString("加密成功 你的密码为 "+enterpass.getString()+" 请记住");
                        } catch (Exception ex) {
                            tickerMsg.setString("加密失败~ 有错误"+ex.toString());
                            ex.printStackTrace();
                        } finally{
                            try{fileR.close();}catch(Exception e){}
                            try{fileW.close();}catch(Exception e){}
                        }
                    }else{
                        tickerMsg.setString("两次输入的密码不一样");
                    }
                }else{
                    tickerMsg.setString("文件路径不能为空");
                }
               
                // Do nothing                       
                // Insert post-action code here
            }                      
        }                    
        // Insert global post-action code here
}                  
    public int getPass(String pass){
        byte[] passes=pass.getBytes();
        int result=0;
        for(int len=0;len<passes.length;len++){
            result+=passes[len];
        }
        return result;
    }
    /**
     * This method should return an instance of the display.
     */
    public Display getDisplay () {                        
        return Display.getDisplay(this);
    }                       
   
    /**
     * This method should exit the midlet.
     */
    public void exitMIDlet () {                        
        getDisplay().setCurrent(null);
        destroyApp(true);
        notifyDestroyed();
    }                       
   
    /** This method returns instance for Encrypt component and should be called instead of accessing Encrypt field directly.                       
     * @return Instance for Encrypt component
     */
    public Form get_Encrypt() {
        if (Encrypt == null) {                     
            // Insert pre-init code here
            Encrypt = new Form(null, new Item[] {                      
                get_filepath(),
                get_outputPath(),
                get_enterpass(),
                get_againpass(),
                get_choiceTypeGroup()
            });
            Encrypt.addCommand(get_exitCommand());
            Encrypt.addCommand(get_okCommand());
            Encrypt.setCommandListener(this);
            Encrypt.setTicker(get_tickerMsg());                    
            // Insert post-init code here
        }                     
        return Encrypt;
    }                   
   
   
    /** This method returns instance for exitCommand component and should be called instead of accessing exitCommand field directly.                       
     * @return Instance for exitCommand component
     */
    public Command get_exitCommand() {
        if (exitCommand == null) {                     
            // Insert pre-init code here
            exitCommand = new Command("Exit", Command.EXIT, 1);                     
            // Insert post-init code here
        }                     
        return exitCommand;
    }                   
 
    /** This method returns instance for filepath component and should be called instead of accessing filepath field directly.                        
     * @return Instance for filepath component
     */
    public TextField get_filepath() {
        if (filepath == null) {                      
            // Insert pre-init code here
            filepath = new TextField("filePath:", null, 120, TextField.ANY);                      
            // Insert post-init code here
        }                      
        return filepath;
    }                    

    /** This method returns instance for enterpass component and should be called instead of accessing enterpass field directly.                        
     * @return Instance for enterpass component
     */
    public TextField get_enterpass() {
        if (enterpass == null) {                      
            // Insert pre-init code here
            enterpass = new TextField("enterpass", null, 120, TextField.ANY | TextField.PASSWORD);                      
            // Insert post-init code here
        }                      
        return enterpass;
    }                    

    /** This method returns instance for againpass component and should be called instead of accessing againpass field directly.                        
     * @return Instance for againpass component
     */
    public TextField get_againpass() {
        if (againpass == null) {                      
            // Insert pre-init code here
            againpass = new TextField("againpass", null, 120, TextField.ANY | TextField.PASSWORD);                      
            // Insert post-init code here
        }                      
        return againpass;
    }                    
 

    /** This method returns instance for choiceTypeGroup component and should be called instead of accessing choiceTypeGroup field directly.                        
     * @return Instance for choiceTypeGroup component
     */
    public ChoiceGroup get_choiceTypeGroup() {
        if (choiceTypeGroup == null) {                      
            // Insert pre-init code here
            choiceTypeGroup = new ChoiceGroup("chooseType", Choice.POPUP, new String[0], new Image[0]);                       
            choiceTypeGroup.setSelectedFlags(new boolean[0]);                     
            // Insert post-init code here
            choiceTypeGroup.insert(0,"encrypt",null);
            choiceTypeGroup.insert(0,"decrypt",null);
        }                      
        return choiceTypeGroup;
    }                    

    /** This method returns instance for okCommand component and should be called instead of accessing okCommand field directly.                        
     * @return Instance for okCommand component
     */
    public Command get_okCommand() {
        if (okCommand == null) {                      
            // Insert pre-init code here
            okCommand = new Command("OK", Command.OK, 1);                      
            // Insert post-init code here
        }                      
        return okCommand;
    }                    

    /** This method returns instance for outputPath component and should be called instead of accessing outputPath field directly.                        
     * @return Instance for outputPath component
     */
    public TextField get_outputPath() {
        if (outputPath == null) {                      
            // Insert pre-init code here
            outputPath = new TextField("outputPath:", null, 120, TextField.ANY);                      
            // Insert post-init code here
        }                      
        return outputPath;
    }                    

    /** This method returns instance for spacer1 component and should be called instead of accessing spacer1 field directly.                        
     * @return Instance for spacer1 component
     */
    public Spacer get_spacer1() {
        if (spacer1 == null) {                      
            // Insert pre-init code here
            spacer1 = new Spacer(1000, 1);                      
            // Insert post-init code here
        }                      
        return spacer1;
    }                    

    /** This method returns instance for gauge1 component and should be called instead of accessing gauge1 field directly.                        
     * @return Instance for gauge1 component
     */
    public Gauge get_gauge1() {
        if (gauge1 == null) {                      
            // Insert pre-init code here
            gauge1 = new Gauge("gauge1", false, 100, 50);                      
            // Insert post-init code here
        }                      
        return gauge1;
    }                    

    /** This method returns instance for tickerMsg component and should be called instead of accessing tickerMsg field directly.                        
     * @return Instance for tickerMsg component
     */
    public Ticker get_tickerMsg() {
        if (tickerMsg == null) {                      
            // Insert pre-init code here
            tickerMsg = new Ticker("kj021320/u7B80/u5355/u52A0/u5BC6/u7A0B/u5E8F");                      
            // Insert post-init code here
        }                      
        return tickerMsg;
    }                    
    
    public void startApp() {
        initialize();
    }
   
    public void pauseApp() {
    }
   
    public void destroyApp(boolean unconditional) {
    }
}

程序采用 异或形式加密~ 所以加密就是解密...choosetype那个按扭是多余的!呵呵.忘记说一点~ Connector不支持创建文件! 所以输入和输出文件必须要存在,-_-郁闷了吧! 本地文件协议如下例如

file:///c:/13.jpg 这样才能访问本地文件