管理员请不要将其标记为重复项,请完整阅读我的问题。我正在加密和解密某些文本,但是在同一个文件中运行时,其主要运行正常,但是当我从外部调用其加密和解密功能时。它在运行时给出错误。我正在附上代码。
包装要求

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;

import security.SHA256Algo;
import shradhafinalwiddesign.UpdateFile;
import shradhafinalwiddesign.UserRegistration;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * Simple TripleDES Encrypt/Decrypt Test
 * sha1, utf-8, no padding
 *
 * uses commons-codec-1.6
 * javac -cp :commons-codec-1.6.jar TripleDESTest.java
 * java -cp :commons-codec-1.6.jar TripleDESTest
 */

public class TripleDesDemo {


    public static void main(String[] args) throws Exception {

        String text = "textToEncrypt";
        UserRegistration user = new UserRegistration() ;
        user.setlUsername("tarunv") ;
        user.setAnswer("tommysdsfdsfsd") ;
        user.setLastaccess("pets namesdfsfds") ;
        user.setLpassword("computersdfdsfd") ;

        String h1 = SHA256Algo.createHash(user.getlUsername()) ;
        String h2 = SHA256Algo.createHash(user.getLpassword()) ;
        String h3 = SHA256Algo.createHash(user.getAnswer()) ;

        String hash1 = UpdateFile.modifyHashValue(h1).substring(0, 24) ;
        String hash2 = UpdateFile.modifyHashValue(h2) ;
        String hash3 = UpdateFile.modifyHashValue(h3) ;

        System.out.println("    key1 : "+hash1.length()+"    key2 : "+hash2.length()+"   key3 : "+hash3.length());
        byte[] arr = toByteArray(user) ;

        byte[] codedtext = TripleDesDemo._encrypt(arr,"tarunvermacdac@gmail.com");
        byte[] codedtext1 = TripleDesDemo._encrypt(codedtext,"tarun.spicyabc@gmail.com");
        byte[] codedtext2 = TripleDesDemo._encrypt(codedtext1,"direct_tarun@yahoo.co.in");

        writeSmallBinaryFile(codedtext2, "tarun.bat") ;
        byte[] texttoDecrypt = readSmallBinaryFile("tarun.bat");

        byte[] decodedtext = TripleDesDemo._decrypt(texttoDecrypt,"direct_tarun@yahoo.co.in");
        byte[] decodedtext1 = TripleDesDemo._decrypt(decodedtext,"tarun.spicyabc@gmail.com");
        byte[] decodedtext2 = TripleDesDemo._decrypt(decodedtext1,"tarunvermacdac@gmail.com");

        System.out.println(codedtext + " ---> " + toObject(decodedtext2));

      }


    public static byte[] _encrypt(byte[] plainTextBytes, String secretKey) throws Exception {

        byte[] keyBytes = secretKey.getBytes();

        SecretKey key = new SecretKeySpec(keyBytes, "DESede");
        Cipher cipher = Cipher.getInstance("DESede");
        cipher.init(Cipher.ENCRYPT_MODE, key);

        //byte[] plainTextBytes = message.getBytes("utf-8");
        byte[] buf = cipher.doFinal(plainTextBytes);
        byte [] base64Bytes = Base64.encodeBase64(buf);
        //String base64EncryptedString = new String(base64Bytes);

        return base64Bytes ;
    }

    public static byte[] _decrypt(byte[] encryptedText, String secretKey) throws Exception {

        //byte[] message = Base64.decodeBase64(encryptedText);
        byte[] message = Base64.decodeBase64(encryptedText);
        byte[] keyBytes = secretKey.getBytes();
        SecretKey key = new SecretKeySpec(keyBytes, "DESede");

        Cipher decipher = Cipher.getInstance("DESede");
        decipher.init(Cipher.DECRYPT_MODE, key);

        byte[] plainText = decipher.doFinal(message);
        return plainText ;
        //return toObject(plainText);
    }

    public static byte[] toByteArray(UserRegistration obj) throws IOException {
        byte[] bytes = null;
        ByteArrayOutputStream bos = null;
        ObjectOutputStream oos = null;
        try {
            bos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(bos);
            oos.writeObject(obj);
            oos.flush();
            bytes = bos.toByteArray();
        } finally {
            if (oos != null) {
                oos.close();
            }
            if (bos != null) {
                bos.close();
            }
        }
        return bytes;
    }

    public static UserRegistration toObject(byte[] bytes) throws IOException, ClassNotFoundException {
        UserRegistration obj = null;
        ByteArrayInputStream bis = null;
        ObjectInputStream ois = null;
        try {
            bis = new ByteArrayInputStream(bytes);
            ois = new ObjectInputStream(bis);
            obj = (UserRegistration) ois.readObject();
        } finally {
            if (bis != null) {
                bis.close();
            }
            if (ois != null) {
                ois.close();
            }
        }
        return obj;
    }

    public static byte[] readSmallBinaryFile(String aFileName) throws IOException {
        Path path = Paths.get(aFileName);
        return Files.readAllBytes(path);
    }

    public static void writeSmallBinaryFile(byte[] aBytes, String aFileName) throws IOException {
        Path path = Paths.get(aFileName);
        Files.write(path, aBytes); //creates, overwrites
    }
}

代码在main上运行良好,但是当我从其他程序包中的其他类调用其函数时,代码运行不正常。这是异常(exception)。
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/codec/binary/Base64   at desede.TripleDesAlgo._encrypt(TripleDesAlgo.java:81)

这是.classpath文件









在此先感谢您的帮助。

最佳答案

您缺少commons-codec.jar。从http://commons.apache.org/proper/commons-codec/download_codec.cgi下载。
然后添加它的项目构建路径。为此,请右键单击该项目,单击“属性”,单击“Java Build Path”,打开“库”选项卡,然后单击“添加外部JAR ...”。

或者如果您正在使用maven添加依赖项

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.6</version>
</dependency>

07-24 09:46
查看更多