一个简单的加密解密程序
2013-02-19 00:00
881 查看
import java.util.Scanner; /** *简单的加密算法 *原理:按key值对明文逐字节循环移位 *加密右移,解密左移等距(实际采用右移补距的方法) * * @author gdhuangsha@hotmail.com * @version 0.1 */ public final class Encryption { /** *操作标记 *ENCRYPT - 加密标记 */ public static final int ENCRYPT = 1; /** *操作标记 *DECRYPT - 解密标记 */ public static final int DECRYPT = -1; /** *字节加密方法 *@param msg byte,明文 *@param key byte,密钥 *@param method 使用类中静态常量操作标记 Encrytpion.ENCRYPT及 *Encryption.DECRYPT *@return 返回密文字节 */ public static byte encryption(byte msg, byte key, int method) { // key的预处理,处理结果0<=key&&key<8 key = (byte)(method * (key % 8)); key = (byte)(key >= 0 ? key : key + 8); // msg的预处理,避免msg首位为1 int nMsg = msg & 255; // 移位掩码,tmp保存低位溢出信息 int mask = (int) Math.pow(2, key) - 1; int tmp = nMsg & mask; // 循环移位 nMsg >>= key; tmp <<= (8 - key); //低位溢出信息移至高位 nMsg |= tmp; return (byte)(255 & nMsg); //取出低8位 } /** *重载方法,用于加密字节数组。 *特别说明:利用new String(byte[])方法将密文转换为String后,再使用 *其getBytes()方法转换为byte[]并译码,不能得出正确结果! *@param msg byte[],明文字节数组 *@param key byte[],密钥字节数组 *@param method 操作方法 *@return 返回密文字节数组 */ public static byte[] encryption(byte[] msg, byte[] key, int method) { byte[] nMsg = new byte[msg.length]; for (int i = 0; i < msg.length; i++) { nMsg[i] = encryption(msg[i], key[i % key.length], method); } return nMsg; } /** *重载方法,用于加密String *@param msg String,明文字节数组 *@param key String,密钥字节数组 *@param method 操作方法 *@return 返回密文字节数组 */ public static byte[] encryption(String msg, String key, int method) { if (msg == null) { System.out.println("错误:明文为空"); System.exit(-1); } if (key == null) { System.out.println("错误:密文为空"); System.exit(-1); } return encryption(msg.getBytes(), key.getBytes(), method); } /*简单测试 */ public static void main(String[] args) { System.out.print("请输入明文:"); Scanner sc = new Scanner(System.in); String plaintext = sc.nextLine(); System.out.print("请输入密钥:"); String key = sc.nextLine(); byte[] bMsg = plaintext.getBytes(); byte[] bKey = key.getBytes(); byte[] bCipher = encryption(bMsg, bKey, ENCRYPT); System.out.println("密文:" + new String(bCipher)); byte[] bTranslate = encryption(bCipher, bKey, DECRYPT); System.out.println("译文:" + new String(bTranslate)); } }
相关文章推荐
- 一个简单的C++加密,解密文件程序
- 用java编写一个简单的字符串加密解密程序,将字符串分成若干行,实现字符串以一列一列读取,并还原之前输入的字符串。这里实现4行输出。
- C++/Qt中一个简单的加密解密程序
- 一个简单的加密和解密程序——凯撒密码
- 一个简单的加密解密程序
- 一个简单的加密解密算法
- C++字节流与二进制字符串相互转换(一个简单的明文加解密程序)
- 一个简单的加密,解密方法
- php的一个简单加密解密代码
- 一个简单的加密解密方法(java、shell脚本)
- MD5和一个可逆加密算法相接合的加密和解密程序
- 一个简单的凯撒加密解密程序的fgets函数用法注意
- Java实现一个简单的加密解密方法
- 一个最简单的加密解密算法(人人能懂)
- 一个简单的恺撒加密程序
- 异或加密法 在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。 解密的方法就是再执行一次同样的操作。
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- 一个简单的c#加密,签名,验签,解密算法.(1)
- C# 程序简单实现加密解密程序代码