为了保证程序的安全,经常采用数据加密的方法。Java 中提供了专门用于加密运算的类和接口。
除了使用加密类和接口外,还可以通过多种方式实现字符串的加密。其中常用的就是获取字符串的字节数组,之后对字节数组中的每个字节都进行运算,得到新的内容,这时所获得的字符串与原字符串将不相同,以此达到加密的效果;解密时再将加密字符串进行相反的运算,这样即可得到原字符串。
本实例简单介绍如何通过数据运算实现字符串的加密和解密,实现步骤如下。
(1) 创建一个静态的 encryptAndDencrypt() 方法,在该方法中传入两个参数。代码如下:
public static String encryptAndDencrypt(String value, char secret) { byte[] bt=value.getBytes(); //将需要加密的内容转换为字节数组 for(int i=0;i<bt.length;i++) { bt[i]=(byte)(bt[i]^(int)secret); //通过异或运算进行加密 } String newresult=new String(bt,0,bt.length); //将加密后的字符串保存到 newresult 变量中 return newresult; }
上述代码首先将需要加密的内容转换为字节数组,接着遍历字节数组中的内容,在 for 语句中通过异或运算进行加密,然后将加密后的字符串保存到 newresult 变量中。最后返回 newresult 变量的值。
(2) 在 main() 方法中添加代码,接收用户在控制台输入的内容并输出,然后调用 encryptAndUncrypt() 方法对字符串分别进行加密和解密,并将加密和解密后的内容输出。代码如下:
public static void main(String[] args) { Scanner scan=new Scanner(System.in); char secret='8'; //加密文字符 System.out.println("请输入您想加密的内容:"); String pass=scan.next(); System.out.println("原字符串内容:"+pass); String encryptResult=encryptAndDencrypt(pass,secret); System.out.println("加密后的内容:"+encryptResult); String uncryptResult=encryptAndDencrypt(encryptResult,secret); System.out.println("解密后的内容:"+uncryptResult); }
(3) 执行上述代码进行测试,如下所示。
请输入您想加密的内容: hello,java 原字符串内容:hello,java 加密后的内容:P]TTWRYNY 解密后的内容:hello,java
示例2
加密:把一个字符串数据在原有的字节基础上+1
解密:把一个加密后的字符串的字节在基础上-1
/** * 加密,把一个字符串在原有的基础上+1 * @param data 需要解密的原字符串 * @return 返回解密后的新字符串 */ public static String encode(String data) { //把字符串转为字节数组 byte[] b = data.getBytes(); //遍历 for(int i=0;i<b.length;i++) { b[i] += 1;//在原有的基础上+1 } return new String(b); }
/** * 解密:把一个加密后的字符串在原有基础上-1 * @param data 加密后的字符串 * @return 返回解密后的新字符串 */ public static String decode(String data) { //把字符串转为字节数组 byte[] b = data.getBytes(); //遍历 for(int i=0;i<b.length;i++) { b[i] -= 1;//在原有的基础上-1 } return new String(b); }
main函数测试
public static void main(String[] args) { //加密英文 String data = "ABCDEFG"; String result = encode(data); System.out.println("加密后:"+result); //解密 String str = decode(result); System.out.println("解密后:"+str); //加密中文 data = "我是中文abc123"; result = encode(data); System.out.println("加密后:"+result); String str1 = decode(result); System.out.println("解密后:"+str1); }
运行结果
加密后:BCDEFGH 解密后:ABCDEFG 加密后:牒癰幮痈bcd234 解密后:我是中文abc123
示例类代码
public class Test3 { /** * 加密,把一个字符串在原有的基础上+1 * @param data 需要解密的原字符串 * @return 返回解密后的新字符串 */ public static String encode(String data) { //把字符串转为字节数组 byte[] b = data.getBytes(); //遍历 for(int i=0;i<b.length;i++) { b[i] += 1;//在原有的基础上+1 } return new String(b); } /** * 解密:把一个加密后的字符串在原有基础上-1 * @param data 加密后的字符串 * @return 返回解密后的新字符串 */ public static String decode(String data) { //把字符串转为字节数组 byte[] b = data.getBytes(); //遍历 for(int i=0;i<b.length;i++) { b[i] -= 1;//在原有的基础上-1 } return new String(b); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //加密英文 String data = "ABCDEFG"; String result = encode(data); System.out.println("加密后:"+result); //解密 String str = decode(result); System.out.println("解密后:"+str); //加密中文 data = "我是中文abc123"; result = encode(data); System.out.println("加密后:"+result); String str1 = decode(result); System.out.println("解密后:"+str1); } }
感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程