目录

java字符串的加解密

2019年02月02日 10:36 | 2296次浏览

为了保证程序的安全,经常采用数据加密的方法。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);

	}

}



小说《我是全球混乱的源头》

感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程