当前位置:  编程技术>移动开发
本页文章导读:
    ▪(JAVA) 施用异或进行简单的密码加密(JAVA实现)[转]        (JAVA) 使用异或进行简单的密码加密(JAVA实现)[转] http://blog.sina.com.cn/s/blog_532af66a0100a1lq.html import java.io.BufferedReader;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.i.........
    ▪ java环境有关问题        java环境问题 今天用eclipse 跑一个项目,pom.xml中一直报错找不到什么tool.jar解决办法:环境变量由C:\Program Files\Java\jdk1.6.0_10\bin改为:.;%JAVA_HOME%\lib\*.jar;%JAVA_HOME%\jre\lib\*.jar ......
    ▪ 业务与效能实现接口化分离开发       业务与功能实现接口化分离开发 我以前开发的时候不太注重接口开发,需要接口的时候才开发接口,有时直接在功能里调用具体实现,加上以前对接口好处体会没有那么深,用的时候很随意.........

[1](JAVA) 施用异或进行简单的密码加密(JAVA实现)[转]
    来源: 互联网  发布时间: 2014-02-18
(JAVA) 使用异或进行简单的密码加密(JAVA实现)[转]

http://blog.sina.com.cn/s/blog_532af66a0100a1lq.html

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;


public class ChgAnGo {

 // log4jのプロパティフィアル名
 private static String LOG_PROPERTIES = "log4j.properties";

 // パスワードファイルパス
 private static String PASSWORD_FILEPATH = "output/password.txt";

 // 反転用文字入力ファイルパス
 private static String CONVERT_FILEPATH = "input/convert.txt";

 // ログメッセージ:暗号化処理開始
 private static String LOG_ENCRYPT_START = "文字列の暗号化開始";

 // ログメッセージ:暗号化処理完了
 private static String LOG_ENCRYPT_END = "文字列の暗号化完了";

 // ログメッセージ:暗号化処理前
 private static String LOG_ENCRYPT_BEFORE = "暗号化処理前:";

 // ログメッセージ:暗号化処理後
 private static String LOG_ENCRYPT_AFTER = "暗号化処理後:";

 //反転用文字を取得できない場合
 private static String LOG_CONVERT_KEY_READ_ERROR = "暗号化のキーワードの取得に失敗しました。";

 //ファイルに出力失敗場合
 private static String LOG_FILE_WRITE_ERROR = "暗号化したパスワードのファイル出力に失敗しました。";

 // コンソールメッセージ:入力メッセージ
 private static String CONSOLE_INPUT_MESSAGE = "暗号化したいパスワードを入力してください。";

 // コンソールメッセージ:入力した文字列バイト数>40場合
 private static String CONSOLE_INPUT_COUNT_ERROR = "エラー:40バイト以内文字列を入力してください。";

 // コンソールメッセージ:半角英数字、半角記号以外が入力された場合
 private static String CONSOLE_INPUT_CHAR_ERROR = "エラー:半角英数字、半角記号を入力してください。";

 // コンソールメッセージ:ファイルに出力失敗場合
 private static String CONSOLE_FILE_WRITE_ERROR = "エラー:暗号化したパスワードをファイルに出力するのは失敗しました。";

 // コンソールメッセージ:反転用文字入力ファイルを取得できない場合
 private static String CONSOLE_CONVERT_KEY_READ_ERROR = "エラー:暗号化のキーワードの取得に失敗しました。";

 // コンソールメッセージ:暗号化成功場合
 private static String CONSOLE_SUCCESS_END = "暗号化したパスワードはoutput/password.txtに出力しました。";

 // コンソールメッセージ:プログラム終了
 private static String CONSOLE_END = "処理終了しました。";

 // ログを出力するために、loggerを取得
 private static Logger logger = Logger.getLogger(ChgAnGo.class.getName());

 
 public static void main(String[] args) {

  ChgAnGo chgAnGo = new ChgAnGo();

  //log4jプロパティファイルを取得する
  PropertyConfigurator.configure(LOG_PROPERTIES);

  //処理開始ログ出力
  logger.info(LOG_ENCRYPT_START);

  try {

   //暗号化したい文字列
   String inStr = "";

   //暗号化したい文字列の取得
   //コマンドラインから入力した引数が存在(args.length==1)場合
   if (args.length == 1) {
    inStr = args[0];
   } else {

    //コマンドラインから入力した引数が不存在(args.length<>1)場合
    //    byte[] input = new byte[41];

    //スクリーンへメッセージを出力する。
    System.out.println(CONSOLE_INPUT_MESSAGE);

    //スクリーンから暗号化したい文字列を取得する。
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    inStr = br.readLine();

   }

   // 文字列のチェック
   //入力した文字列バイト数>40場合
   if (inStr.getBytes().length > 40) {
    System.out.println(CONSOLE_INPUT_COUNT_ERROR);
   } else if (inStr.getBytes().length > inStr.length()) {

    //    半角英数字、半角記号以外が入力された場合
    System.out.println(CONSOLE_INPUT_CHAR_ERROR);
   } else if ("".equals(inStr)) {

    //何も入力しない場合
    System.out.println(CONSOLE_INPUT_CHAR_ERROR);
   } else {

    //上記以外場合、文字列に暗号化処理
    //暗号化のキーワードの取得
    String cstrKey = chgAnGo.getConvertKey(CONVERT_FILEPATH);

    if (cstrKey != null && !"".equals(cstrKey)) {
     //暗号化処理メソッドを呼び出す
     String ango = chgAnGo.setEncrypt(inStr, cstrKey);

     //暗号化した文字列をファイルに出力する。
     chgAnGo.writeToFile(PASSWORD_FILEPATH, ango.getBytes());

     //正常終了時、ログを出力する。
     logger.info(LOG_ENCRYPT_BEFORE + inStr);
     logger.info(LOG_ENCRYPT_AFTER + ango);

     //スクリーンへメッセージを出力する。
     System.out.println(CONSOLE_SUCCESS_END);
     
     System.out.println(chgAnGo.getEncrypt(ango, cstrKey));

    } else {
     //反転用文字を取得できない場合、ログを出力する。
     logger.info(LOG_CONVERT_KEY_READ_ERROR);

     //スクリーンへメッセージを出力する。
     System.out.println(CONSOLE_CONVERT_KEY_READ_ERROR);
    }
   }

  } catch (IOException e) {

   //例外エラー発生場合、詳細エラーを出力する。
   logger.fatal(e.getMessage());

  } finally {

   //処理完了ログ出力
   //スクリーンへメッセージを出力する
   System.out.println(CONSOLE_END);

   //「文字列の暗号化完了」ログを出力する。
   logger.info(LOG_ENCRYPT_END);
  }

 }

 
 protected String setEncrypt(String password, String cstrKey) {

  //int[] snNum = new int[password.length()];
  char[] snNum = new char[password.length()];
  String result = "";

  //ビット反転操作を繰り回す
  for (int i = 0, j = 0; i < password.length(); i++, j++) {

   //反転用文字列」<「暗号化したい文字列」場合、
   //反転用文字列を繰り回して利用する
   if (j == cstrKey.length())
    j = 0;

   //暗号化したバイト=(暗号化したい文字)^(反転用文字)^(1/(当該文字の位置+1))
   //snNum[i] = password.charAt(i) ^ cstrKey.charAt(j) ^ (1 / (i + 1));
   snNum[i] = (char) (password.charAt(i) ^ cstrKey.charAt(j) ^ (1 / (i + 1)));
   result += (char) snNum[i];
  }

  //暗号化した文字列を返す。
  return result;
 }

 
 protected String getEncrypt(String password, String cstrKey) {

  char[] snNum = new char[password.length()];
  String result = "";

  //ビット反転操作を繰り回す
  for (int i = 0, j = 0; i < password.length(); i++, j++) {

   //反転用文字列」<「復号化したい文字列」場合、
   //反転用文字列を繰り回して利用する   
   if (j == cstrKey.length())
    j = 0;
   char n = password.charAt(i);

   //復号化したバイト=(復号化したい文字)^(反転用文字)^(1/(当該文字の位置+1))
   snNum[i] = (char) (n ^ cstrKey.charAt(j) ^ (1 / (i + 1)));
   result += snNum[i];
  }

  //復号化した文字列を返す。
  return result;
 }

 
 protected void writeToFile(String filePath, byte[] data) throws IOException {

  FileOutputStream outfile = null;
  
  try {
   //ファイルパスより、出力ファイルを開く
   outfile = new FileOutputStream(filePath);

   //データをファイルに出力する
   outfile.write(data, 0, data.length);

   //ファイルを保存する
   outfile.flush();

  } catch (IOException e) {
   //ファイル出力失敗場合、ログを出力する。
   logger.info(LOG_FILE_WRITE_ERROR);

   //スクリーンへメッセージを出力する。
   System.out.println(CONSOLE_FILE_WRITE_ERROR);
   
   throw e;

  } finally {

   //ファイルをクローズする
   if (outfile != null) {
    outfile.close();
   }
  }

 }

 
 protected String getConvertKey(String filePath) throws IOException {

  String convertKey = null;
  BufferedReader br = null;

  try {
   //ファイルパスより、入力ファイルを開く
   br = new BufferedReader(new FileReader(filePath));

   //反転用文字を取得する
   convertKey = br.readLine();

   //反転用文字を返す
   return convertKey;

  } catch (IOException e) {

   //反転用文字を取得できない場合、ログを出力する。
   logger.info(LOG_CONVERT_KEY_READ_ERROR);

   //スクリーンへメッセージを出力する。
   System.out.println(CONSOLE_CONVERT_KEY_READ_ERROR);

   throw e;

  } finally {

   //ファイルをクローズする
   if (br != null) {
    br.close();
   }

  }

 }

}


    
[2] java环境有关问题
    来源: 互联网  发布时间: 2014-02-18
java环境问题
今天用eclipse 跑一个项目,pom.xml中一直报错找不到什么tool.jar

解决办法:
环境变量由
C:\Program Files\Java\jdk1.6.0_10\bin
改为:
.;%JAVA_HOME%\lib\*.jar;%JAVA_HOME%\jre\lib\*.jar

    
[3] 业务与效能实现接口化分离开发
    来源: 互联网  发布时间: 2014-02-18
业务与功能实现接口化分离开发

我以前开发的时候不太注重接口开发,需要接口的时候才开发接口,有时直接在功能里调用具体实现,加上以前对接口好处体会没有那么深,用的时候很随意,到在改别人代码才深有感触。
打个比方,原先的代码里有个FtpUtil工具类,是ftp上传下载功能的具体实现,但是现在上传方式要改成sftp方式上传,这时候问题就出现了,有个被多个业务类继承的父类,以前直接调用ftp实现类,但是现在要改成直接sftp的话,那以前的ftp方式就废弃了,万一哪天再用或被别的要ftp方式上传的地方继承,还需要重新做,这时候,最好的方式就是将这个父类中定义的变量类型由原来的实现类改为IFtpUtil接口,不管ftp还是sftp类都需要实现这个接口,并且接口里定义了一些上传下载等公用方法。这里怎么判断用ftp还是sftp呢,我们这个父类里有个setFtpInfo()方法,原先是从xml里取ftp节点,然后取里面的信息传到FtpUtil工具类的构造方法,但是现在我取ftp节点和sftp节点,如不为空,将参数分别传入到相应工具类的构造方法。这样两种上传方式就不影响了。
写这个日志为了提醒自己,开发的时候要多重考虑和为以后升级提供方便,尽量在业务里使用接口调用。


ftp  commons-net
sftp jsch

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3