`
sd6733531
  • 浏览: 65769 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

位与加密方式的实现

阅读更多

位与加密方式的速度非常快。若能保证其私有密钥的安全性,则位与加密的安全性很高,要破译几乎是不可能的。

但是位与加密的缺陷是灵活性较差,对私有密钥的管理是个头疼的问题。

在只需要简单粗暴的加密方式的环境下,这是个不错的选择。

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;

public class Encryptor {

    public static byte[] encrypt(byte[] content, byte[] key) {
        if (key.length == 0)
            throw new IllegalArgumentException("key can not be empty!");
        byte[] copy = Arrays.copyOf(content, content.length);
        encrypt1(copy, key, 0);
        return copy;
    }

    private static void encrypt1(byte[] content, byte[] key, int start) {
        if (start == content.length)
            return;// 递归结束条件
        int end = start + key.length;
        if (end >= content.length)
            end = content.length;
        for (int i = start; i < end; i++) {
            content[i] ^= key[i - start];
        }
        encrypt1(content, key, end);
    }

    public static byte[] decrypt(byte[] content, byte[] key) {
        // 异或的解密等于加密
        return encrypt(content, key);
    }

    public static void encryptFile(File file, File output, byte[] privateKey)
            throws IOException {
        if(output.getParentFile()!=null)
            output.getParentFile().mkdirs();
        FileInputStream fis = new FileInputStream(file);
        FileOutputStream fos = new FileOutputStream(output);
        byte[] buffer = new byte[8192];
        int realSize = -1;
        try {
            while ((realSize = fis.read(buffer)) != -1) {
                byte[] encrypted = encrypt(buffer, privateKey);
                fos.write(encrypted,0,realSize);
            }
        }
        finally {
            fos.close();
            fis.close();
        }
    }

    public static void decryptFile(File file, File output, byte[] privateKey)
            throws IOException {
        encryptFile(file, output, privateKey);
    }

    public static void main(String[] args) throws Exception {
        byte[] key = "kiss".getBytes();
        byte[] content = "dddefr12345adkfjsadfjladskfj".getBytes();
        byte[] test = encrypt(content, key);
        System.out.println(new String(test));
        test = decrypt(test, key);
        System.out.println(new String(test));
//        encryptFile(new File("test"), new File("test2"), key);
//        decryptFile(new File("test2"), new File("test3"), key);
    }
}

 

小弟潜水好久~出来透个气。呼呼

 

分享到:
评论

相关推荐

    Excel的MD5加密的2种实现方式

    Excel的字段MD5加密,一种是VBA函数,另一种为宏函数。建议使用VBA函数。会相对简单。具体的函数使用组合键Alt+F11即可查看,

    3DES加密算法 C++实现

    3DES(即Triple DES)是DES向AES过渡的加密算法,它使用3条64位的密钥对数据进行三次加密。是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。比起最初的DES,3DES更为安全。

    C语言实现Base64编解码(加密和解密).zip

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二...本资源使用C语言实现Base64加密和解密,可以实现数据的加密和文件的加密,不借助任何的第三方工具,便于移植。

    delphi 7实现AES 128位加解密

    算法模式:ECB(Electronic Code Book,电子密码本) 模式 密钥长度:128位 补码方式:PKCS5Padding 加密结果编码方式:base64 delphi 7实现,经测试加密、解密正确,与在线网站加密、解密结果一致!

    使用C++语言实现基于JVMTI机制的 JAVA 代码 加密保护工具

    将加密后的jar包,替换原来的没有加密的jar包,与要发布的程序一起进行发布.(一般替换lib目录下对应的jar包即可) 9.加密后的jar包运行方法: windows下: 拷贝libClassHook.dll文件到程序的根目录(通常为要执行...

    C#课程设计—简单的图片文件加密器

    2.以2位加密为例, BMP图片的一个像素的3个字节 ,每个字节把最后两位拿来放被加密文件的一个字节的2位,所以BMP图片一个字节代表的颜色值最多变化3,让图片整体的颜色变化根本看不出来,从而实现加密。 3.由于是...

    青风加密系统

    青风加密系统采用了国际标准的最高端128位密钥以及256位换算的AES加密技术,同时使用了硬件“加密锁”的强加密方式,更安全可靠。可实现与金碟财务软件、企业ERP等其他管理软件的无缝集成,紧急时可一键关闭所有的...

    Python+MySQL实现用户加密存储验证系统

    用于托管第三方数据库,内容进行加密后存储,没有秘钥无法破解用户存储,登录,查看,删除操作,存储在数据库中用户密码加密存储,密码加密方式可选,目前只可选MD5和SHA1,用户存储内容加密存储,加密方式自定义...

    android ndk c语言加密 256 CBC模式,密钥32位,向量16位

    C语言实现AES加密解密,CBC模式,密钥32位,向量16位;加密结果同Java一致,但是因补码方式有区别,Java需是NoPadding补码方式;加密内容则需16的倍数;完成签名校验

    深空公钥加密系统v2.0绿色免费版

    工具为绿色版本,简单易用,主要功能可帮助用户通过RSA512位-RSA8192位不等密钥长度的公钥来对电脑的文件实现加密操作,软件支持数字签名、数字验签、公钥加密、私钥解密等多种的加密方式。有效的保护您文件的安全性...

    AES加密解密 for vba

    ' =======================================================...' [Encoding_Base64_Hex] 编码方式,Base64(缺省值)还是Hex ' ======================================================================================

    JAVA8实现php的 128位AES/ECB/ZeroBytePadding加密(没有写解密),之后bin2hex

    $CPWD=mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $pwd, MCRYPT_MODE_ECB);...JAVA项目中,因为JAVA8中没有直接支持ZeroBytePadding的试,所以要使用NoPadding方式代替,以记录一下,供有用的朋友使用。

    C语言AES加密解密,CBC模式,256(含测试代码且结果与Java一致)

    C语言实现AES加密解密,CBC模式,密钥32位,向量16位;加密结果同Java一致,但是因补码方式有区别,Java需是NoPadding补码方式;加密内容则需16的倍数;

    Java类文件加密专家

    Java 类文件加密专家通过分析Class文件的结构,使用1024位加密算法将Class文件数据加密,任何Java反编译工具均不可能对加密后的文件进行破解。 系统特点 1.采用纯C语言开发的内核算法,运行速度极快。 2.彻底...

    c# 加密和解密相关代码

    数据的加密与解密 文件的加密与解密 第 章 加密与解密技术 第19章 加密与解密技术 829 19.1 数据的加密与解密 实例571 异或算法对数字进行加密与解密 光盘位置:光盘\MR\19\571 中级 趣味指数: 实 例说明 在实现...

    金盾视频加密器V2014 - 支持WIN8,支持32位和64位操作系统

    只需要加密一次,就可以实现一机一码授权播放; V2014版重要更新: 1、支持Windows8 32位和64位操作系统; 2、新增绑定用户移动设备功能,比如U盘、移动硬盘、手机、SD存储卡等,远程自动绑定,用户播放时插入绑定...

    一种基于加密域的数字图像水印算法的设计与实现Matlab源码(毕设项目).zip

    一种基于加密域的数字图像水印算法的设计与实现Matlab源码(毕设项目).zip 【项目资源介绍】 结合混沌系统和图像置乱技术提出了一种基于混沌和置乱的图像加密算法,并将该算法应用到数字水印技术中,实现了一种基于...

    圣天诺加密锁虚拟程序

    圣天狗是一个强大的软件保护设备,它实现了 163 位椭圆曲线非对称算法和 AES 对称 算法,提供了很多具有创新性的功能 , 并且首次把安全通道的概念引入到基于硬件的软件保护中,彻底解决了被保护软件和安全硬件的安全...

    一个asp的32位md5加密

    实现asp和asp.net的程序混用时使用的加密方式

    Java类加密2.0版本,无限制

    JAVA CLASS文件加密工具对CLASS文件进行加密保护,加密密钥高达256位(bit,即:32字节),并采用多重加密的算法,既安全又高效。加密后的CLASS文件不可能被破解;反编译工具对加密后的CLASS文件无能为力,根本就不...

Global site tag (gtag.js) - Google Analytics