0 0

帮忙看看,自己写的加密算法,有乱码问题5

private boolean encryptFile(String oldFile, String newFile) throws Exception {
        // 动态生成锁
        KEYVALUE = getRandomString().getBytes();

        FileInputStream in = new FileInputStream(oldFile);

        File file = new File(newFile);
        if (!file.exists())
            file.createNewFile();
        FileOutputStream out = new FileOutputStream(file);

        // 把锁放到文件头
        out.write(KEYVALUE);

        // 其他部分开始加密
        int c, pos, keylen, myFlag;
        myFlag = 0;
        pos = 0;
        keylen = KEYVALUE.length;
        byte buffer[] = new byte[BUFFERLEN];
        while ((c = in.read(buffer)) != -1) {
            if (myFlag++ == 0) {
                for (int i = 0; i < c; i++) {
                    buffer[i] ^= KEYVALUE[pos];
                    out.write(buffer[i]);
                    pos++;
                    if (pos == keylen)
                        pos = 0;
                }
            } else {
                out.write(buffer, 0, c);
            }
        }
        out.flush();
        in.close();
        out.close();
        
        return true;
    }
    

    private byte[] decryptFile(String oldFile) throws Exception {
        FileInputStream in = new FileInputStream(oldFile);

        List<byte[]> tmpBuffer = new ArrayList<byte[]>();

        byte[] tmpB = new byte[prefixLength];
        // 先取出来锁
        in.read(tmpB, 0, prefixLength);
        KEYVALUE = tmpB;

        int c, pos, keylen, myFlag;
        myFlag = 0;
        pos = 0;
        keylen = KEYVALUE.length;
        byte buffer[] = new byte[BUFFERLEN];
        while ((c = in.read(buffer)) != -1) {
            if (myFlag++ == 0) {
                byte[] tmpbuffer_2 = new byte[buffer.length];
                for (int i = 0; i < c; i++) {
                    buffer[i] ^= KEYVALUE[pos];
                    tmpbuffer_2[i] = buffer[i];
                    pos++;
                    if (pos == keylen)
                        pos = 0;
                }

                tmpBuffer.add(tmpbuffer_2);
            } else {
                tmpBuffer.add(buffer);
            }
        }
        in.close();

        byte[] all = new byte[1024];
        int maxsize = 0;
        for (byte[] b : tmpBuffer) {
            maxsize += b.length;
            if (all.length > maxsize) {
                System.arraycopy(b, 0, all, maxsize - b.length, b.length);
            } else {
                byte[] tempAll = new byte[all.length + 512];
                System.arraycopy(all, 0, tempAll, 0, all.length);
                all = tempAll;
                System.arraycopy(b, 0, all, maxsize - b.length, b.length);
            }
        }

        return all;
    }
2012年6月10日 14:51
目前还没有答案

相关推荐

    Android RSA加密算法,解密乱码问题解决DEMO

    本文将深入探讨Android中RSA加密算法的使用,以及如何解决解密时可能出现的乱码问题。 首先,我们需要理解RSA算法的基本原理。RSA(Rivest-Shamir-Adleman)是一种公钥加密技术,它由一对密钥组成:公钥和私钥。...

    OpenSSL对称加密算法中如何添加新算法

    OpenSSL 对称加密算法中如何添加新算法 OpenSSL 是一个开源的加密算法库,它提供了对称加密算法、非对称加密算法、哈希算法等多种加密算法。OpenSSL 的对称加密算法中可以添加新算法,以满足不同的加密需求。下面...

    QT 实现AES 加密算法

    AES加密算法基于替换和置换的原理,它使用了固定的区块大小128位,并有三种密钥长度:128位、192位和256位。在AES加密过程中,数据被分为128位的数据块,然后经过多次的混合和轮变换,使得原始数据变得难以破解。 ...

    twofish加密算法的实现源代码(含详细文档)

    这对于初学者和专业人士来说都是非常有价值的,因为加密算法的理解通常需要对数学和密码学有深厚的背景知识。 **关于Twofish加密算法** Twofish算法采用了128位的块大小和可变的密钥长度(支持128、192、256位),...

    京东登陆加密算法

    京东登陆加密算法供学习参考24小时内删除,请勿用于非法之事,否则后果自负与作者无关

    C#加密算法汇总 C#加密算法

    C#加密算法汇总 C#加密算法 C#加密算法 C#加密算法

    常见加密算法方式(对称加密和非对称加密)

    - **ElGamal**:一种基于离散对数问题的公钥加密算法,可用于加密和数字签名。 - **DSA(Digital Signature Algorithm)**:数字签名算法,专门用于生成和验证数字签名。 ### Hash算法 Hash算法是一种单向函数,...

    C语言常用加密算法.rar

    首先,我们来看看几种常见的加密算法: 1. **DES(Data Encryption Standard)数据加密标准**:DES是一种对称加密算法,基于64位的数据块和56位的密钥进行操作。尽管DES现在被认为安全性较低,但由于其简单快速,仍...

    Qt写的DES加密算法展示程序

    在这个“Qt写的DES加密算法展示程序”中,我们将深入探讨DES(Data Encryption Standard)加密算法以及如何使用Qt来实现这一经典密码学技术。 **DES加密算法** DES是一种块加密算法,由IBM在1970年代初期开发,并...

    DES加密算法(c语言实现)

    DES(Data Encryption Standard)是一种经典的对称加密算法,由IBM公司于1970年代初期设计,1977年被美国国家标准局(NIST)采纳为联邦信息处理标准(FIPS PUB 46),并在全球范围内广泛使用。DES算法基于Feistel...

    C#加密算法类库

    C#加密算法类库是一个专为.NET开发者设计的工具,它包含了多种常见的加密算法实现,以便在C#项目中方便地进行数据加密和解密。这个类库通常以.dll文件的形式提供,允许开发者通过引用该文件来直接使用其封装好的加密...

    VB各种加密算法

    加密算法是确保信息安全的重要工具,它们可以将明文数据转化为看似随机的密文,防止未经授权的访问。以下是对VB6中几种常见加密算法的详细解释: 1. **DES(Data Encryption Standard)**:DES是一种古老的对称加密...

    java 凯撒加密算法

    Java 凯撒加密算法 Java 凯撒加密算法是一种基于凯撒密码的加密算法,它在 Java 环境下实现了凯撒密码的加密过程。下面是该算法的详细介绍: 凯撒密码流程图 凯撒密码流程图是指凯撒密码的加密过程的图形表示。该...

    java加密算法:Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法

    java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...

    非对称加密算法流程图

    非对称加密算法流程图,使用visio绘制。

    加密算法工具类

    在IT行业中,加密算法是确保数据安全的重要工具。本文将详细介绍标题中提到的"加密算法工具类",包括MD5、DES3、DES、AES、BASE64以及SHA这七种常见的加密算法,并讨论它们在Java环境中的应用。 首先,MD5(Message...

    国际数据加密算法

    国际数据加密算法(International Data Encryption Algorithm,简称IDEA),是由瑞士联邦理工学院的Xuejia Lai和James Massey于1990年提出的一种高效、安全的对称加密算法。IDEA以其出色的加密强度和相对较低的计算...

    加密算法-使用C++来实现md5加密算法.zip

    加密算法_使用C++来实现md5加密算法

Global site tag (gtag.js) - Google Analytics