RC4相对是速度快、安全性高的加密算法。在实际应用中,我们可以对安全系数要求高的文本进行多重加密,这样破解就有一定困难了。如下测试给出了先用RC4加密,然后再次用BASE64编码,这样双重锁定,保证数据信息安全(个人见解,不周之处请谅解!)。

package com.bao.tools.encryption;

import java.io.IOException;
import java.util.Scanner;

import org.junit.Test;

/**
 * @title RC4加密解密算法
 * @author Administrator
 * @date 2015-7-16
 */
public class CRC4 {

/*
     * 加密解密算法
     */
    public static String setEncrypted(String value, String key) {
        //声明256位数组
        int[] iS = new int[256];
        byte[] iK = new byte[256];
        //赋值
        for (int i = 0; i < 256; i++)
            iS[i] = i;

int j = 1;

//检索位置
        for (short i = 0; i < 256; i++) {
            iK[i] = (byte) key.charAt((i % key.length()));
        }

j = 0;
        
        //替换位置
        for (int i = 0; i < 255; i++) {
            j = (j + iS[i] + iK[i]) % 256;
            int temp = iS[i];
            iS[i] = iS[j];
            iS[j] = temp;
        }

int i = 0;
        j = 0;
        char[] iInputChar = value.toCharArray();//字符转换
        char[] iOutputChar = new char[iInputChar.length];//获得字符长度
        for (short x = 0; x < iInputChar.length; x++) {
            i = (i + 1) % 256;
            j = (j + iS[i]) % 256;
            int temp = iS[i];
            iS[i] = iS[j];
            iS[j] = temp;
            int t = (iS[i] + (iS[j] % 256)) % 256;
            int iY = iS[t];
            char iCY = (char) iY;
            iOutputChar[x] = (char) (iInputChar[x] ^ iCY);//做字符异或运算
        }
        return new String(iOutputChar);
    }

/*
     * 测试
     */
    @Test
    public void test() throws IOException {

Scanner scanner = new Scanner(System.in);
        
        System.out.println("------------使用RC4和BASE64多重加密算法---------");
        System.out.println("请输入RC4使用的加密值 (value):");
        String inputStr = scanner.nextLine();
        System.out.println("请输入RC4加密键(key):");
        String key = scanner.nextLine();
        String str = setEncrypted(inputStr, key);//使用RC4加密
        str = CBase64.setEncrypted(str);//使用base64编码(CBase64加密类请看 <Java中使用BASE64加密&解密>)

// 打印加密后的字符串
        System.out.println("\n---------------------\n加密后字符:"+ str);

str = CBase64.getEncrypted(str);//首先使用CBase64解码
        // 打印解密后的字符串
        System.out.println("解密后字符 :"+ setEncrypted(str, key));

   scanner.close();
    }
}

运行结果如下

RC4加密解密算法的更多相关文章

  1. 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输

    Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...

  2. 一组PHP可逆加密解密算法

    对于大部分密码加密,我们可以采用md5.sha1等方法.可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密. 对于需要还原的信息,则需要采用可逆的加密解密算法. 下面一组PHP函数是实现此加 ...

  3. java 实现 DES加密 解密算法

    DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种: ...

  4. 数据的加密传输——单片机上实现TEA加密解密算法

    各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加密起来,岂不是增加了通信的安全性.常用的加密解密算法比如DES.RSA等,受限于单片机的内存和运算速度,实 ...

  5. md5加密以及可逆的加密解密算法

    md5加密 package gov.mof.fasp2.gcfr.adjustoffset.adjust; import java.security.MessageDigest; public cla ...

  6. N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列。设计加密解密算法,且要求K<=15*N.

    N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列.设计加密解密算法,且要求K<=15*N. ...

  7. RSA加密解密算法

    /** * RSA加密解密算法 * Class Rsa */ class Rsa { /** * 获取pem格式的公钥 * @param $public_key 公钥文件路径或者字符串 * @retu ...

  8. php与java通用AES加密解密算法

    AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的 ...

  9. 一个经典的PHP加密解密算法

    项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理.最常见的应用在用户登录以及一些API ...

随机推荐

  1. mybatis(一)安装

    1.创建web项目,添加jar包 2.创建实验表user_t 3.在src下创建conf.xml文件,如下 <?xml version="1.0" encoding=&quo ...

  2. zw版【转发·台湾nvp系列Delphi例程】HALCON DirectFile

    zw版[转发·台湾nvp系列Delphi例程]HALCON DirectFile unit Unit1;interfaceuses Windows, Messages, SysUtils, Varia ...

  3. zw版【转发·台湾nvp系列Delphi例程】HALCON SelectObj

    zw版[转发·台湾nvp系列Delphi例程]HALCON SelectObj procedure TForm1.Button1Click(Sender: TObject);var img : HIm ...

  4. PL/SQL编程基础

    范例:编写不做任何工作的PL/SQL块 BEGIN NULL ; END ; /   范例:编写一个简单的PL/SQL程序 DECLARE v_num NUMBER ; -- 定义一个变量v_num ...

  5. E2PROM与Flash的引脚图

    E2PROM(24C02):

  6. zabbix监控nginx

     nginx status详解 active connections – 活跃的连接数量server accepts handled requests — 总共处理了11989个连接 , 成功创建11 ...

  7. Android 常用工具类之 ScreenUtil

    需求: 截屏 参考 :    Android开发:截屏 screenshot 功能小结 package bvb.de.openadbwireless.utils; import android.app ...

  8. PHP将XML数据转换为数组

    <?php $s=join(,file('httpapi.elong.comxmlv2.0hotelcn0132701501.xml')); $result = xml_to_array($s) ...

  9. ACM题目————食物链

    题目描述 Description 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A吃B,B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并 ...

  10. 利用Selenium自动化web测试

    简介: Selenium 是一个没有正式指导手册的开源项目,这让测试人员的问题调查很费时间.本文为基于 Selenium 1.0(发布于 2009 年 6 月)的测试期间的常见问题提供最佳实践. 简介 ...