Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Kleopatra:解密失败:无效数据_Javascript_Java_Pkcs#7_Forge - Fatal编程技术网

Javascript Kleopatra:解密失败:无效数据

Javascript Kleopatra:解密失败:无效数据,javascript,java,pkcs#7,forge,Javascript,Java,Pkcs#7,Forge,对于加密文件,我使用PKCS#7和Javascript bundle forge.pki var forge = require('node-forge'); var contentBuffer = forge.util.createBuffer( forge.util.decode64( "fasdasd asdasdasda" )); var cert = forge.pki.certificateFromPem(certPem); var p7 = forge.pkcs7.creat

对于加密文件,我使用PKCS#7和Javascript bundle forge.pki

var forge = require('node-forge');

var contentBuffer = forge.util.createBuffer( forge.util.decode64( "fasdasd asdasdasda" ));

var cert = forge.pki.certificateFromPem(certPem);

var p7 = forge.pkcs7.createEnvelopedData();
p7.addRecipient(cert);
p7.content = contentBuffer;
console.log("Encrypt...");
p7.encrypt();

var asn1Cert = p7.toAsn1();

var derBuffer = forge.asn1.toDer(asn1Cert);

var p7mContent = derBuffer.toHex();

console.log(p7mContent);
我将十六进制值作为字符串常量复制到Java类中。Java保存然后将其转换为.p7m文件,并将其存储在本地

public void writeDocumentContent(String filename) throws Exception {

        byte[] encryptedMessage = getP7MBytes(hex);

        InputStream inputStream = new ByteArrayInputStream(encryptedMessage);

        handleTransfer(inputStream, TransferKanal.HTML5);

    }

    private static byte[] getP7MBytes(String p7m) {
        int len = p7m.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(p7m.charAt(i), 16) << 4) + Character.digit(p7m.charAt(i + 1), 16));
        }
        return data;
    }

    private void handleTransfer(InputStream inputStream, TransferKanal kanal) throws Exception {
        String path = "C:TEMP/padline";
        createDirectory(path);
        String filename = "example." + kanal.getFileExtension();
        File targetFile = new File(path, filename);
        provideTransferData(inputStream, targetFile);
    }

    private void provideTransferData(InputStream inputStream, File targetFile) throws Exception {
        try (InputStream bInputStream = new BufferedInputStream(inputStream, 20 * 8192)) {
            provide(bInputStream, targetFile);
        } catch (IOException e) {
            throw new Exception("error while reading/writing transfer data", e);
        }
    }

    private boolean createDirectory(String directory) {
        File file = new File(directory);
        if (!file.exists()) {
            file.mkdirs();
            return true;
        }
        return false;
    }

    private void provide(InputStream is, File finalFile) throws Exception {
        try {

            File destFile   = new File(finalFile.getAbsolutePath());

            FileOutputStream buffer = null;
            try {
                buffer = new FileOutputStream(destFile);

                int nRead;
                byte[] buf = new byte[2 * 16384];

                while ((nRead = is.read(buf, 0, buf.length)) != -1) {
                    buffer.write(buf, 0, nRead);
                }

            } catch (Exception e) {
                throw new Exception("provision location corrupted", e);
            } finally {
                if (buffer != null) {
                    buffer.close();
                }
            }

        } catch (IOException e) {
            throw new Exception("error copying file", e);
        }
    }
并将其作为.pfx文件导入Kleopatra。然后,我在克利奥帕特拉中生成(加密)p7m文件进行解密,并推送以下错误消息:

解密失败:无效数据

openssl pkcs12 -export -inkey private.key -in public.cert -out certificate.pfx