Java异或加解密

Posted yunshouhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java异或加解密相关的知识,希望对你有一定的参考价值。

/*
 * Copyright (C) 2017, Megatron King
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */

package com.yunshouhu.bouncycastle.xor;

import android.util.Base64;


/**
 * StringFog base64+xor encrypt and decrypt implementation.
 *
 * @author Megatron King
 * @since 2018/9/2 14:34
 */
public  class xorEncrypt

    private static final String CHARSET_NAME_UTF_8 = "UTF-8";

   
    public String encrypt(String data, String key) 
        String newData;
        try 
            newData = new String(Base64.encode(xor(data.getBytes(CHARSET_NAME_UTF_8), key), Base64.NO_WRAP));
         catch (Exception e) 
            newData = new String(Base64.encode(xor(data.getBytes(), key), Base64.NO_WRAP));
        
        return newData;
    

    
    public String decrypt(String data, String key) 
        String newData;
        try 
            newData = new String(xor(Base64.decode(data, Base64.NO_WRAP), key), CHARSET_NAME_UTF_8);
         catch (Exception e) 
            newData = new String(xor(Base64.decode(data, Base64.NO_WRAP), key));
        
        return newData;
    

    /**
    public boolean overflow(String data, String key) 

        return data != null && data.length() * 4 / 3 >= 1024;
    */

    private static byte[] xor(byte[] data, String key) 
        int len = data.length;
        int lenKey = key.length();
        int i = 0;
        int j = 0;
        while (i < len) 
            if (j >= lenKey) 
                j = 0;
            
            data[i] = (byte) (data[i] ^ key.charAt(j));
            i++;
            j++;
        
        return data;
    

    public static void main(String[] args) 
        
        for(int i=0;i<100;i++)
        
            String key="android"+i;
            String dataString="java锄禾日当午,汗滴禾下土,谁知盘中餐粒粒皆辛苦";
            xorEncrypt xor=new xorEncrypt();
            String cipher=xor.encrypt(dataString, key);
            System.out.println(cipher);
            
            String textString=xor.decrypt(cipher, key);
            if(!textString.equals(dataString))
            
                System.err.println("error textString="+textString+",dataString="+dataString);
            else
                System.out.println("textString="+textString);
            
        
        System.out.println("==============");
        
        for(int i=0;i<100;i++)
        
            String key="android";
            String dataString="java锄禾日当午,汗滴禾下土,谁知盘中餐粒粒皆辛苦"+i;
            xorEncrypt xor=new xorEncrypt();
            String cipher=xor.encrypt(dataString, key);
            System.out.println(cipher);
            
            String textString=xor.decrypt(cipher, key);
            if(!textString.equals(dataString))
            
                System.err.println("error textString="+textString+",dataString="+dataString);
            else
                System.out.println("textString="+textString);
            
        
    

以上是关于Java异或加解密的主要内容,如果未能解决你的问题,请参考以下文章

Java异或加解密

Java异或加解密

java JVM-自定加密和解密类加载器

Java加密解密class文件,使用classLoader动态解密class文件

Java - 使用 XOR 解密的字符串不产生原始/加密字符串

如何解密简单的异或加密