`
sd6733531
  • 浏览: 66522 次
  • 性别: 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);
    }
}

 

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

 

分享到:
评论

相关推荐

    rsa与aes混合加密java实现

    在IT安全领域,加密技术是保护数据免受...Java提供了丰富的API支持这两种加密算法的实现,开发者可以根据具体需求选择合适的方式进行数据加密。在实际应用中,理解并熟练掌握这些加密技术,对于确保信息安全至关重要。

    AES加密算法实现(128位)

    AES加密算法的核心特点在于它的分组加密方式,它将明文分为128位的数据块进行处理,同时密钥也可以是128位、192位或256位。在本案例中,我们关注的是128位的密钥和明文,这意味着每次加密或解密操作都会处理128位的...

    DES加密算法C++实现

    常见的填充方式有PKCS#7,它保证了填充后的数据长度是64位的整数倍。在C++中,需要编写填充和解填充的函数。 7. **编码和解码**:在C++中,原始的二进制数据通常需要转换为字符字符串进行存储和传输,如使用hex编码...

    随机生成36位MD5加密字符

    然而,如果`GUID.java`中确实包含MD5生成方法,那么它的实现可能会提供一些关于如何生成"36位MD5加密字符"的线索。 总的来说,MD5在Java中是一个重要的加密和校验工具,通过`MessageDigest`类可以方便地生成32位的...

    MFC实现DES加密解密实现

    在这个项目中,我们将探讨如何使用MFC在VC++环境中实现DES加密和解密。 首先,DES是一种块加密算法,它将明文数据分为64位的块进行处理。但是,由于其中7位是奇偶校验位,实际有效密钥长度为56位。DES通过一系列...

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

    在提供的压缩包文件中,`md5宏.xla`可能包含了一个宏的实现,而`MD5加密2种方式.xlsx`则可能是包含VBA函数或者演示如何使用VBA函数进行MD5加密的Excel工作簿。为了安全起见,使用外部来源的宏时应谨慎,确保其来源...

    nodejs实现3des(2倍长)加密方式,与DES加密工具一致

    同样使用`crypto.createDecipheriv`创建解密器,参数与加密器相同: ```javascript const decipher = crypto.createDecipheriv('des-ede3', key, iv); ``` 5. **解密数据** 使用解密器将加密后的数据还原成...

    RSA加密 私钥加密公钥解密

    在实现RSA加密时,需要注意以下几点: 1. 密钥长度:RSA的安全性依赖于密钥的长度,通常建议使用至少2048位的密钥以抵御当前的计算能力。 2. 密钥管理:私钥必须妥善保管,不能泄露,而公钥则可以分发,但需要防止...

    几种简单常用的加密方式

    本文将详细探讨几种简单但常用的加密方式,以及如何实现这些加密方法。 首先,我们来看MD5(Message-Digest Algorithm 5)哈希加密。MD5是一种广泛使用的哈希函数,它能够将任意长度的输入(也叫做预映射pre-image...

    文件加密解密算法研究与实现

    论文首先对现有的四种加密方式进行深入的研究和分析,这些加密方式包括: 1. **对称加密**:如DES(Data Encryption Standard,数据加密标准),它使用相同的密钥进行加密和解密。DES是一种较为经典的加密算法,但...

    AES多种加密解密方式C语言方式实现

    AES在2001年被美国国家标准与技术研究所(NIST)采纳为联邦信息处理标准(FIPS),取代了之前的DES加密标准。AES的核心在于一系列的替换和置换操作,包括字节替代、行移位、列混淆和轮密钥加。 **C语言实现**:...

    java加密算法实现

    对称加密是最基础的加密方式,使用相同的密钥进行加密和解密。Java中提供了`javax.crypto`包来支持此类算法,如: - **DES(Data Encryption Standard)**: 老一代的加密标准,安全性较低,但速度快。 - **3DES...

    MD5 16位和32位的加密方式

    ### MD5的16位与32位加密方式 在讨论中提到的“16位”和“32位”加密方式,实际上是指MD5散列值的不同表示形式,并非指加密强度或加密算法本身的变化。标准的MD5输出是一个128位的值,通常以32位十六进制数的形式...

    DES加密解密实现

    学习和理解DES加密解密的实现,有助于深入理解密码学的基本原理,包括对称加密的运作方式,以及非线性和线性变换在加密算法中的应用。不过,需要注意的是,DES现在已经被视为较弱的加密标准,因为它只有56位的有效...

    使用openssl中aes加密算法实现文件的加密解密(源代码)

    它不仅提供了多种加密方式,还支持数据安全传输等功能。在实际应用中,OpenSSL被广泛用于服务器端和客户端之间安全通信的建立。 #### 三、AES加密算法简介 AES(Advanced Encryption Standard,高级加密标准)是一...

    VB实现DES加密解密算法,vb加密和解密,VBA

    这需要创建一个.NET类库项目,实现DES加密解密功能,然后在VBA中通过CreateObject或早绑定的方式调用这些函数。 以下是VB.NET中实现DES加密解密的简单示例代码: ```vbnet Imports System.IO Imports System....

    MD5加密代码实现

    在标题"MD5加密代码实现"中,我们理解到这个话题主要关注如何在实际编程中应用MD5算法进行数据的加密处理。虽然MD5不被认为是一种安全的加密算法,因为它容易遭受碰撞攻击,即找到两个不同的输入数据,但它们的MD5...

    C语言实现MD5加密算法

    - 位操作:正确理解和运用位操作是实现MD5的关键,例如,向左或向右移动位,位与、位或、位异或等。 C语言实现的MD5加密代码可能包含以下几个部分: 1. 初始化函数:设置初始的中间变量值。 2. 内部处理函数:执行...

Global site tag (gtag.js) - Google Analytics