- 浏览: 538011 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
landerson:
明显就有要求的嘛
ANDROID轻量级JSON序列化和反序列化[转] -
jimode2013:
很不错,就是需要这个方法
多个UIViewController使用addSubView,第二个 UIViewController 不响应旋转[转] -
w11h22j33:
...
[转]NSMutableArray中的自动释放对象让我郁闷了一整天 -
w11h22j33:
UILabel* label = [[UILabel a ...
Iphone开发 -
w11h22j33:
http://mobile.51cto.com/iphone- ...
获得通讯录中联系人的所有属性[转]
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();
}
}
}
}
发表评论
-
干掉你程序中的僵尸代码【转】
2012-12-22 11:05 966随着万圣节越来越流行,我感觉有必要跟大家讨论一下一个 ... -
一个文本框搞定信用卡相关信息的输入[转]
2012-12-22 11:03 1140http://beforweb.com/node/134 ... -
android 开源 OCR 项目 及手写识别[转]
2012-12-11 18:21 57701)一个为Android平台,将识别由手机的相机拍摄的图 ... -
Android通过共享用户ID来实现多Activity进程共享【转】
2012-12-10 14:33 1110http://mypyg.iteye.com/blog/720 ... -
Android应用程序组件Content Provider的启动过程源代码分析【转】
2012-12-05 18:31 1148通过前面的学习,我们知道在Android系统中,Cont ... -
理解android上的安全性【转】
2012-12-03 18:08 918开发 Android 应用程序时,必须处理很多与安全性相关的方 ... -
Android 安全机制概述 Permission【转】
2012-12-03 18:07 11751 Android 安全机制概述 Android 是一个权限分 ... -
Android学习笔记之一谁动了我的接口附checkPermission流程(Dean)[转]
2012-12-03 18:06 18127前段时间接到一个有趣的需求!我们实现的某某功能的手机对外提供了 ... -
SL4A 之实现原理解析【转】
2012-10-23 23:52 1285关于SL4A的简介和在Android系统的安装及使用,请参 ... -
百度地图API之根据经纬度查询地址信息(Android)[转]
2012-06-16 00:15 19803http://blog.csdn.net/lyq8479/ar ... -
百度地图的手动定位和自动定位[转]
2012-06-15 23:24 3459http://aokunsang.iteye.com/b ... -
如何编程实现开启或关闭GPS?
2012-06-09 22:14 1132来自 手机应用中最酷的可能就是位置服务相关的了, ... -
Android软键盘的隐藏显示研究[转]
2012-05-25 16:30 1444Android是一个针对触摸屏专门设计的操作系统,当点 ... -
15 个变量和方法命名的最佳实践[转]
2012-02-27 11:44 103215 个变量和方法命名的最佳实践 在每个代码范围内使用足够短 ... -
iPhone Android Web开发(概要)
2012-01-19 15:15 1071一、 前端使用技术 JavaScript、 jQuer ... -
移动 电信 联通 APN cmwap cmnet ctwap ctnet 3gwap uniwap 3gnet uninet设置[转]
2011-11-23 14:35 2781APN(Access Point Name),即“接入 ... -
Android Http CMWAP联网获取实例【转】
2011-10-24 13:24 1403上午的时候原本想通过改变切入点的方式来实现cmwap,但是我们 ... -
监听ListView滚动到最底部【转】
2011-09-13 10:27 5885监听ListView的滚动可以用两个东西: ListV ... -
Android蓝牙开发浅谈【转】
2011-09-07 14:20 1576转自:http://www.eoeandroid.co ... -
修改Android模拟器的HOST
2011-06-03 11:08 4223C:\WINDOWS\system32\drivers ...
相关推荐
在上述代码中,展示了如何使用Java实现文件的异或加密和解密。首先,我们需要了解异或加密的核心步骤: 1. **加密过程**:读取原始文件(如a.txt)的字节数据,逐个字节与一个预设的密钥(在这个例子中为1234)进行...
在"Java异或加密解密.txt"这个文件中,可能包含了具体的Java代码示例,展示了如何使用Java实现上述的异或加密和解密过程。通过阅读和理解这段代码,你可以学习到如何在Java程序中应用异或加密技术,从而保护敏感数据...
`Example.java` 文件可能展示了如何使用异或运算进行简单的加密和解密。在加密过程中,原始数据通常与一个称为密钥的固定值进行异或操作。这个密钥是秘密的,只有拥有它的人才能解密。解密过程就是再次用相同的密钥...
异或加密是一种简单而有效的加密算法,其基本原理是将明文数据与一个密钥进行逐位异或操作,得到的密文就是加密后的结果。解密时,再用相同的密钥与密文进行异或,即可还原出原始数据。这种加密方式的优点在于它速度...
需要注意的是,虽然异或加密相对简单,但它并不安全。对于专业人士来说,这种加密方式很容易被破解,因为只需要知道密钥,就可以通过相同的异或操作解密。此外,如果使用相同的密钥对多个字符串进行加密,可能会导致...
class XORTest { public static void main(String args[]){ char a1='欢',a2='迎',a3='下',a4='载'; char secret='8'; a1=(char)(a1^secret); a2=(char)(a2^secret); a3=(char)(a3^secret);...
Java 使用异或运算实现简单的加密解密算法实例代码 在信息安全领域中,数据加密和解密是非常重要的环节。Java 作为一门流行的编程语言,也提供了多种方式来实现加密和解密。在本篇文章中,我们将介绍使用异或运算...
例如,简单的单密钥加密算法如XOR密码就是基于异或操作的。当两段相同的数据进行异或时,结果是0,这在生成校验和或者计算CRC(循环冗余校验)时非常有用,因为任何数据和0异或都保持不变。此外,异或运算也常用于位...
在Java中,异或加密通常用于实现简单的加密需求,例如密码的哈希处理。下面是一个简单的异或加密示例: ```java public static byte[] xor(byte[] data, byte[] key) { for (int i = 0; i ; i++) { data[i] = ...
本文将深入探讨如何使用Java编程实现一个同步序列密码(流密码)的加密和解密系统。 同步序列密码是一种流密码类型,它的工作方式是通过一个伪随机生成器产生与明文或密文等长的密钥流,然后按位或按字节逐个与明文...
Java中的异或运算是一种基本的逻辑运算,它在编程中有着广泛的应用,特别是在位操作、数据加密、数据校验等领域。异或运算符是`^`,它遵循特定的运算规则,这些规则对于理解它的行为至关重要。 首先,异或运算的...
本文将详细讲解如何使用Java中的异或运算来实现变量互换以及异或加密解密。 首先,我们来看一下如何用异或来实现两个变量的互换,这是基于异或运算的一个重要性质:任何数与0异或都等于它本身,以及同一个数连续...
Java 异或加密算法是一种基于异或操作的简单加密技术,通常用于保护数据的隐私,尤其是在简单的通信或存储中。异或加密算法的核心是异或(XOR)运算,其特性是“相同为0,不同为1”,即任何数字与0进行异或运算结果...
在Java中实现祖冲之密码算法,可以为软件开发者提供一种可靠的加密手段,保护数据的安全传输。 祖冲之密码算法的核心思想是基于线性反馈移位寄存器(LFSR)和有限域上的非线性函数。算法主要包括三个主要部分:初始...
Java异或技操作给任意的文件加密原理及使用详解 本文主要介绍了Java异或技操作给任意的文件加密原理及使用详解,具有一定借鉴价值,需要的朋友可以参考下。 异或操作 异或是一种基于二进制的位运算,用符号XOR...
本文将通过一个具体的Java代码示例来解析如何在Java中实现密码的加密与解密,以帮助读者深入理解并掌握这一关键技术。 #### 二、DES算法概述 DES(数据加密标准)是一种对称加密算法,由IBM公司开发,并于1977年被...
异或加密是一种简单而常见的对称加密方法,它基于位操作中的异或(XOR)逻辑。在计算机科学中,异或操作是一种基本的逻辑运算,它的结果是两个输入位不相同为1,相同为0。在加密领域,异或加密利用了异或的这一特性...
在Java中实现异或加密解密,我们可以创建三个类:`Encoder`、`Decoder`和`Utils`。`Encoder`类负责加密过程,`Decoder`类负责解密,而`Utils`类可以提供一些辅助函数,如将字符串转换为字节数组,以及处理其他与二...
使用异或位运算实现加密解密比aes算法更快,但安全性有待思考。为什么基本上使用md5对用户密码加密?因为md5算法是不可逆的:对加密结果不能进行解密。任意长度的数据,算出的md5值长度都是固定的。部分参考uikoo9...
对每个字节进行异或操作,异或的常量为根据key算出的pi的小数部分的指定长度的某个值(根据key的位数,如果key为三位数,那么就去10^3个pi的小数位数为异或常量的取值),再根据key来决定从这个数组哪个位置来取出...