javascript

git

java

python

git-remote

c++

github

django

c#

reactjs

spring-mvc

reflection

javascript-objects

html5

analytics

node.js

performance

branch-prediction

git-commit

git-revert

c-如何在文件解密期间解决“ EVP_DecryptFInal_ex:错误的解密”

我有以下查询,请问有人可以给我解决方案。

我是第一次进行文件的加密和解密。

我已经使用以下命令通过命令提示符对文件进行了加密:

openssl enc -aes-256-cbc -in file.txt -out file.enc -k "key value" -iv "iv value"

我必须以编程方式对其进行解密。 所以我已经为它编写了程序,但是它抛出以下错误:

./exe_file enc_file_directory
...
error: 06065064: digital envelope routines: EVP_DecryptFInal_ex: bad decrypt: evp_enc.c

下面的程序将输入作为目录路径,并搜索加密的文件“ .enc”,然后尝试将其解密并读入缓冲区。

码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <openssl/evp.h>
#include <openssl/err.h>
#include <openssl/conf.h>
#include <libxml/globals.h>

void handleErrors(char *msg)
{
    {
        ERR_print_errors_fp(stderr);
        printf("%s", msg);
        abort(); 
    }
}

void freeMemory(char *mem)
{
    if (NULL != mem)
    {
        free(mem);
        mem = NULL;
    }
}

/* Function to decrypt the XML files */

int decryptXML(unsigned char *indata, unsigned char *outdata, int fsize)
{

    int outlen1 = 0, outlen2 = 0;

    unsigned char iv[] = "b63e541bc9ece19a1339df4f8720dcc3";
    unsigned char ckey[] = "70bbc518c57acca2c2001694648c40ddaf19e3b4fe1376ad656de8887a0a5ec2" ;

    if (NULL == indata)
    {
        printf ("input data is empty\n");
        return 0;
    }

    if (0 >= fsize)
    {
        printf ("file size is zero\n");
        return 0;
    }

    outdata = (char *) malloc (sizeof (char) * fsize * 2);

    EVP_CIPHER_CTX ctx;

    EVP_CIPHER_CTX_init(&ctx);

    if (! EVP_DecryptInit_ex (&ctx, EVP_aes_256_cbc(), NULL, ckey, iv))
    {
        EVP_CIPHER_CTX_cleanup(&ctx);
    handleErrors("DInit");
    }

    if (! EVP_DecryptUpdate (&ctx, outdata, &outlen1, indata, fsize))
    {
        EVP_CIPHER_CTX_cleanup(&ctx);
        handleErrors("DUpdate");
    }

    if (! EVP_DecryptFinal_ex (&ctx, outdata + outlen1, &outlen2))
    {

        EVP_CIPHER_CTX_cleanup(&ctx);
        handleErrors("DFinal");
    }

    EVP_CIPHER_CTX_cleanup(&ctx);

    return outlen1+outlen2;

}

int isDirectory(char *path)
{
    DIR *dir = NULL;
    FILE *fin = NULL, *fout = NULL;
    int enc_len = 0, dec_len = 0, fsize = 0, ksize = 0;
    unsigned char *indata = NULL, *outdata = NULL;
    char buff[BUFFER_SIZE], file_path[BUFFER_SIZE], cur_dir[BUFFER_SIZE];

    struct dirent *in_dir;
    struct stat s;

    if (NULL == (dir = opendir(path)))
    {
        printf ("ERROR: Failed to open the directory %s\n", path);
        perror("cannot open.");
        exit(1);
    }

    while (NULL != (in_dir = readdir(dir)))
    {

        if (!strcmp (in_dir->d_name, ".") || !strcmp(in_dir->d_name, ".."))
            continue;

        sprintf (buff, "%s/%s", path, in_dir->d_name);

        if (-1 == stat(buff, &s))
        {
            perror("stat");
            exit(1);
        }

        if (S_ISDIR(s.st_mode))
        {

            isDirectory(buff);
        }
        else
        {
            strcpy(file_path, buff);

            if (strstr(file_path, ".enc"))
            {

                /* File to be decrypted */

                fout = fopen(file_path,"rb"); 

                fseek (fout, 0L, SEEK_END);
                fsize = ftell(fout);
                fseek (fout, 0L, SEEK_SET);

                indata = (char*)malloc(fsize);

                fread (indata, sizeof(char), fsize, fout);

                if (NULL == fout)
                {
                    perror("Cannot open enc file: ");
                    return 1;
                }


                dec_len = decryptXML (indata, outdata, fsize);
                outdata[dec_len] = '\0';
                printf ("%s\n", outdata);
                fclose (fin);
                fclose (fout);

            }
        }
    }



    closedir(dir);
    freeMemory(outdata);
    freeMemory(indata);

    return 1; 
}


int main(int argc, char *argv[])
{
    int result;

    if (argc != 2)
    {
        printf ("Usage: <executable> path_of_the_files\n");
        return -1;
    }

    ERR_load_crypto_strings();
    OpenSSL_add_all_algorithms();
    OPENSSL_config(NULL);

    /* Checking for the directory existance */

    result = isDirectory(argv[1]);

    EVP_cleanup();
    ERR_free_strings();

    if (0 == result)
        return 1;
    else
       return 0;
}

谢谢。

trans by 2020-07-29T05:53:41Z

ssh-公钥加密中各种密钥之间有什么区别

我对加密中使用的各种密钥感到困惑。

亚马逊给了我key.ppk

在Linux中,我生成像key.ppkid_rsa.pub这样的密钥

现在腻子使用了key.ppk之类的钥匙

我真的很困惑在哪里使用什么类型的钥匙

trans by 2020-07-27T16:30:38Z

如何不可能“解密” MD5哈希?

可能重复:
MD5哈希值为何不可逆?

我正在阅读有关MD5的问题,这使我想起了令我感到困惑的问题。 非常简单的问题,如果这不是一个好问题,我感到抱歉。 我只是不明白如何使用某种算法将某事物转换为一件事物,并且没有办法使用反向算法将其转换回。

那怎么可能呢?

另外,由于多个字符串可以创建相同的MD5哈希,因为它的数据少于输入字符串,所以其他任何哈希系统如何更好?

trans by 2020-07-26T08:28:19Z

加密-使用Rails加密,解密

不久前,我看到了可以在不包含任何库的情况下在rails中解密和加密字符串的可能性,但是我找不到博客文章。

我希望能够在不包含任何内容的情况下加密和解密字符串。使用相同的密钥可用于其他所有方面,例如签名的cookie。

有任何想法吗?

trans by 2020-07-22T18:53:00Z

安全性-值得对数据库中的电子邮件地址进行加密吗?

我已经在使用盐化哈希将密码存储在数据库中,这意味着我应该不受彩虹表攻击的影响。

不过我有个想法:如果有人掌握了我的数据库怎么办? 它包含用户的电子邮件地址。 我不能真正地散列这些,因为我将使用它们来发送通知电子邮件等。

我应该加密它们吗?

trans by 2020-07-21T12:37:56Z

加密-7-Zip命令在Windows上创建和提取受密码保护的ZIP文件?

在Mac / Linux上以zip / unzip密码保护的zip文件中,我使用:压缩:

zip -P password -r encrypted.zip folderIWantToZip

解压缩:

unzip -P password encrypted.zip

在Windows的命令行上等效的命令是什么(假设已安装7zip)?

我一直在研究,发现无法使用Java zip4j库进行密码加密。 Windows也没有Mac / Linux之类的zip命令提示符

trans by 2020-07-21T05:36:49Z

加密-安全和身份验证:SSL与SASL

我的理解是SSL将加密算法(如AES,DES等)与密钥交换方法(如Diffier-Hellman)结合在一起,以在不安全的网络(如Internet)上的两个端点之间提供安全的加密和标识服务。 。

我的理解是SASL是MD5 / Kerberos协议,几乎可以完成相同的操作。

所以我的问题是:选择两者的利弊是什么?哪种情况使两者更可取? 基本上,我在选择SSL或与SASL结合时正在寻找一些指导原则。 提前致谢!

trans by 2020-07-20T04:17:32Z

安全性-是否有加密的版本控制系统?

我正在寻找一个加密的版本控制系统。 基本上我想

  • 将所有文件本地加密后再发送到服务器。 服务器永远不要接收任何未加密的文件或数据。

  • 其他所有功能都应与SVN或CVS几乎一样地工作。

谁能推荐这样的东西? 我做了很多搜索,但找不到任何东西。

trans by 2020-07-19T08:55:48Z

加密-SHA1 VS RSA:它们之间有什么区别?

SHA1和RSA有什么区别? 它们只是不同的算法还是在某种程度上从根本上(即用于不同事物)不同。

trans by 2020-07-18T20:36:13Z

.net-如何从s导出不可导出的私钥

我需要从Windows应用商店导出私钥。 如果密钥标记为不可导出,该怎么办? 我知道程序越狱有可能导出此密钥。

要导出密钥,我使用Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair(),该密钥从(RSACryptoServiceProvider)cryptoProv.ExportParameters(true)导出密钥。导出的密钥在Org.BouncyCastle.Cms.CmsSignedDataGenerator中用于CMS签名。

我需要.Net解决方案,但任何解决方案都将有用。 谢谢。

trans by 2020-07-14T10:36:18Z

c#-指定的密钥对此算法无效

我有以下代码:

RijndaelManaged rijndaelCipher = new RijndaelManaged();

            // Set key and IV
            rijndaelCipher.Key = Convert.FromBase64String("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678912");
            rijndaelCipher.IV = Convert.FromBase64String("1234567890123456789012345678901234567890123456789012345678901234");

我会抛出:

Specified key is not a valid size for this algorithm.

Specified initialization vector (IV) does not match the block size for this algorithm.

这串怎么了? 我可以列举一下您的一些例子吗?

trans by 2020-07-13T13:39:51Z

加密-如何在代码中隐藏秘密密钥?

我想知道一段时间以来,某些软件如何隐藏秘密密钥,以致无法轻易发现它们。 仅举几个例子:

  • DVD Player软件隐藏CSS密钥
  • 具有序列号/注册码的软件会隐藏用于验证序列号的密钥/哈希

显然,这些程序所做的事情不只是将密钥包含在byte []中,因为这样可以更轻松地窃取其密钥并生成自己的序列号,等等。

什么样的策略用来隐藏这些密钥,以便不容易找到它们?

trans by 2020-07-13T13:23:33Z

什么是C / C ++中最好的加密库?

在以下方面,C / C ++中最好的加密库是什么:

  • 质量
  • 使用方便
  • 可读性
  • 可移植性
  • 性能

您最喜欢什么?为什么喜欢它?

trans by 2020-07-10T13:22:07Z

android-在Java中快速简单的字符串加密/解密

我需要一种快速简单的方法来加密/解密字符串数据的“很多”。我尝试了jasypt,但在我的Android手机上崩溃了。 我有大约2000条记录(字符串)。

BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword("password");
String myEncryptedText = textEncryptor.encrypt(input);

还有其他方法吗? 我不需要极高的安全性,它需要快速!

trans by 2020-07-03T19:41:17Z

ruby-OpenSSL vs GPG用于加密异地备份?

如果在将存档推送到异地备份位置之前可以选择使用GPG和OpenSSL进行本地加密,那么每种解决方案的优缺点是什么?

背景:我目前管理基于Ubuntu 14.04.1的服务器基础架构,并在所有可用的修补程序可用后将其应用。

所有这些系统都是无头的,可以使用经过审查的前提条件和自动化工具自动构建,并且可以通过KVM在基于Intel的统一硬件上在虚拟机中运行。

我们偏爱Ruby,但是偏爱“正确做事”。 由于这两者,我们选择了“备份” gem作为创建要保存的数据的加密档案的方法,因为它会使用Vagrant为开发人员创建与生产中相同的加密档案,而不管其机制如何。 它被传输。

所有软件和配置都是通过Puppet管理的,因此,任何决定都不会对“用户体验”或便利性产生任何影响。 任一选项都将创建相关的脚本来管理,验证或从创建的任何备份中还原。

鉴于此,在用于此目的时,哪个加密选项相对于另一个加密选项是否具有任何优势?

trans by 2020-07-01T21:20:58Z

java-在我的加密字符串上追加新行

在主要:

public static void main(String[] args) throws NoSuchAlgorithmException {
    System.out.println("encrypt:" + encryptPassword("superuser")+":" );
}

public static String encryptPassword(final String password) throws NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance("MD5");
    byte[] hashPassword = md.digest(password.getBytes());
    String encryPass = Base64.encodeBase64String(hashPassword);
    return encryPass;
}

我得到以下输出:

encrypt:C66i8K4gFQ23j1jN2sRCqQ==:

但是,当我在应用程序中实现相同的操作时,将得到以下输出:

encrypt:C66i8K4gFQ23j1jN2sRCqQ==
:

注意:在我的加密字符串上追加了新行。

应用代码:

public boolean authenticateUsernamePasswordInternal(UsernamePasswordCredentials credentials) {
    try {
        System.out.println("encrypt:" + getHash("superuser")+":" );
    } catch (Exception e) {
        logger.error(e.getMessage(), e);
        throw new BadCredentialsAuthenticationException(ErrorConstants.CONNECTION_FAILED);
    }
}

private String getHash(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException{  
    MessageDigest md = MessageDigest.getInstance("MD5");
    byte[] hashPassword = md.digest(password.getBytes());
    String encryPass = Base64.encodeBase64String(hashPassword);
    return encryPass;
}

我如何删除多余的新行。为什么会这样,请帮助我是什么原因?

trans by 2020-06-30T06:28:47Z

C#-存储信用卡详细信息

我有一项业务要求,迫使我在短时间内存储客户的完整信用卡详细信息(号码,姓名,有效期,CVV2)。

理由:如果客户致电订购产品,而当场信用卡被拒,则很可能会失去销售。 如果您获取了他们的详细信息,请感谢他们的交易,然后发现卡被拒,可以给他们打电话,他们更有可能找到另一种付款方式。 如果接受了信用卡,则清除订单中的详细信息。

我不能改变这个。 现有系统以明文形式存储信用卡详细信息,在我要替换的新系统中,我显然不会重复此操作!

那么,我的问题是如何在短时间内安全地存储信用卡。 我显然想要某种加密,但是执行此加密的最佳方法是什么?

环境:C#,WinForms,SQL-Server。

trans by 2020-06-23T19:30:43Z

加密-PHP AES加密/解密

我找到了在PHP中对字符串进行编码/解码的示例。 起初它看起来非常好,但不会起作用:-(

有人知道问题出在哪里吗?

$Pass = "Passwort";
$Clear = "Klartext";

$crypted = fnEncrypt($Clear, $Pass);
echo "Encrypted: ".$crypted."</br>";

$newClear = fnDecrypt($crypted, $Pass);
echo "Decrypted: ".$newClear."</br>";

function fnEncrypt($sValue, $sSecretKey) {
    return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $sSecretKey, $sDecrypted, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
}

function fnDecrypt($sValue, $sSecretKey) {
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $sSecretKey, base64_decode($sEncrypted), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
}

结果是:

加密:—‚(ÑÁ ^ yË~F'¸®Ó–í œð2Á_B‰Â—

解密:—‚(ÑÁ ^ yË~F'¸®Ó–í œð2Á_B‰Â—

trans by 2020-06-23T12:15:27Z

加密-如何在iPhone上加密核心数据内容

我有一些信息想存储在iPhone应用程序中的静态加密。 我是iPhone开发的新手,有些人对CoreData及其与视图的集成方式不太熟悉。 尽管我可以轻松地将其放入SQLITE3数据库或任何其他后备数据格式,但我的数据为JSON。 我将采用最简单的方法(a)加密和(b)与iPhone视图层集成。

每次启动应用程序时,用户将需要输入密码来解密数据。 加密的目的是在用户丢了手机的情况下阻止数据访问。

出于速度原因,我宁愿一次加密和解密整个文件,而不是加密数据库每一行中的每个单独字段。

注意:这与929744问题不同,后者的目的是防止用户弄乱或看到数据。 使用时,数据应完全透明。

还要注意:我愿意使用SQLCipher来存储数据,但是更愿意使用iPhone / CoreData框架上已经存在的东西,而不是经过冗长的构建/集成过程。

trans by 2020-06-23T02:27:02Z

c#-如果提琴手2可以通过HTTPS解密所有调用,那么SSL的意义是什么?

不久前,我在这里提出了一个问题,该问题是如何隐藏我的http请求调用,并使它们在我的应用程序中更安全。 我不希望人们使用提琴手2查看呼叫并设置自动响应器。 每个人都告诉我使用SSL,通话将被隐藏并且信息安全。

我购买并安装了SSL证书,然后进行了所有设置。 我启动了提琴手2并运行了一个测试应用程序,该应用程序连接到https Web服务以及https php脚本。

Fiddler 2不仅能够检测到这两个请求,而且还可以解密它们! 我能够看到所有信息的来回追溯,这使我想到了这个问题。

如果SSL对安全性的影响为零,那么拥有SSL的意义何在? 使用或不使用SSL,我都能看到所有信息,第四和第四,仍然设置了自动响应器。

.NET中缺少某些内容,可以更好地隐藏通过SSL发出的呼叫吗?

编辑

由于收到了一些回复,我为此问题添加了新的部分。 如果应用程序连接到Web服务以登录怎么办。 该应用程序向Web服务发送用户名和密码。 然后,Web服务将数据发送回应用程序,提示登录数据正确或错误。 即使使用SSL,使用提琴手2的人也可以设置一个自动响应器,然后该应用程序将被“破解”。 我知道在调试中查看数据可能会很有用,但是我的问题是,究竟应该做什么以确保SSL连接到它所请求的SSL。 基本上说不能有中间人。

trans by 2020-06-19T10:41:02Z

1 2 3 4 5 下一页 共5页