天道酬勤,学无止境

openssl 对任何大小的密钥都开放(openssl is acting open to any size key)

问题

openssl 如何处理密钥,因为它采用任意大小的密钥(1 字节到任意大小)。 在这里转到实际密钥的程序是什么..

openssl enc -d -des-ecb -in cipher.txt -out text.out -K '530343412312345445123345677812345678812324' 
回答1

openssl 是如何与 key 一起工作的...程序是什么...

这取决于程序,但程序在整个库中通常是一致的。 在您的示例中,您使用的是openssl dec ,因此您使用的是dec子程序。 源代码位于<openssl dir>/apps/enc.cencdecenc.c一部分)。

以下是相关部分:

unsigned char key[EVP_MAX_KEY_LENGTH],iv[EVP_MAX_IV_LENGTH];
unsigned char salt[PKCS5_SALT_LEN];
...
char *hkey=NULL,*hiv=NULL,*hsalt = NULL;

-K的参数存储在hkey

else if (strcmp(*argv,"-K") == 0)
{
    if (--argc < 1) goto bad;
    hkey= *(++argv);
}

然后,在第 580 行附近:

if ((hkey != NULL) && !set_hex(hkey,key,sizeof key))
{
    /* Handle failure */
}

set_hex如下所示,hex 解码通过-K传入的参数。 它通过memset用 0 填充未使用的长度。 未使用的长度是EVP_MAX_KEY_LENGTH减去长度-K参数(十六进制解码后)。

最后,在 610 行附近:

if (!EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, enc))
{
    /* Handle failure */
}

注意-k (small k ) 采用不同的代码路径并使用EVP_BytesToKey来派生密钥。


int set_hex(char *in, unsigned char *out, int size)
{
    int i,n;
    unsigned char j;

    n=strlen(in);
    if (n > (size*2))
    {
        BIO_printf(bio_err,"hex string is too long\n");
        return(0);
    }
    memset(out,0,size);
    for (i=0; i<n; i++)
    {
        j=(unsigned char)*in;
        *(in++)='\0';
        if (j == 0) break;
        if ((j >= '0') && (j <= '9'))
            j-='0';
        else if ((j >= 'A') && (j <= 'F'))
            j=j-'A'+10;
        else if ((j >= 'a') && (j <= 'f'))
            j=j-'a'+10;
        else
        {
            BIO_printf(bio_err,"non-hex digit\n");
            return(0);
        }
        if (i&1)
            out[i/2]|=j;
        else
            out[i/2]=(j<<4);
    }
    return(1);
}
回答2

我对案件的观察得出以下结论:

  1. 它需要十六进制值
  2. 如果大小小于 8 个字节,则填充 0
  3. 它需要前 8 个字节作为键

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 不推荐使用mcrypt,替代方法是什么?(mcrypt is deprecated, what is the alternative?)
    问题 根据此处发布的评论,不建议使用mcrypt-extension并将在PHP 7.2中将其删除。 因此,我正在寻找一种加密密码的替代方法。 现在我正在使用类似 mcrypt_encrypt(MCRYPT_RIJNDAEL_128, md5($key, true), $string, MCRYPT_MODE_CBC, $iv) 我需要您的意见以最好/最有效的方式对密码进行加密,当然,加密的密码应受PHP 7.xx支持,并且也应该可以解密,因为我的客户确实希望有一个选择来“恢复”他们的密码而不生成新密码一。 回答1 最佳做法是对密码进行哈希处理,以使密码不可解密。 这使可能已获得对数据库或文件的访问权限的攻击者的处境变得更加困难。 如果必须加密数据并使其可解密,请访问https://paragonie.com/white-paper/2015-secure-php-data-encryption,获取有关安全加密/解密的指南。 总结该链接: 使用Libsodium-PHP扩展如果您不能使用Libsodium,请使用defuse / php-encryption-直接使用PHP代码如果您不能使用Libsodium或defuse / php-encryption,请使用OpenSSL-许多服务器已经安装了此服务器。 如果没有,则可以使用--with-openssl [= DIR
  • 如何在php中加密/解密数据?(How to encrypt/decrypt data in php?)
    问题 我目前是一名学生,并且正在学习PHP,我正在尝试对PHP中的数据进行简单的加密/解密。 我进行了一些在线研究,其中一些非常令人困惑(至少对我而言)。 这是我想做的事情: 我有一个包含这些字段(用户ID,Fname,Lname,Email,Password)的表 我要拥有的是先加密所有字段,然后再解密(是否可以使用sha256进行加密/解密,如果没有任何加密算法的话) 我想学习的另一件事是如何创建与良好的“盐”组合的单向hash(sha256) 。 (基本上,我只是想简单地实现加密/解密, hash(sha256)+salt)先生/女士,您的回答将大有帮助,并非常感谢。 谢谢++ 回答1 前言 从表定义开始: - UserID - Fname - Lname - Email - Password - IV 更改如下: 字段Fname , Lname和Email将使用由OpenSSL提供的对称密码进行加密, IV字段将存储用于加密的初始化向量。 存储要求取决于所使用的密码和模式。 稍后再详细介绍。 Password字段将使用单向密码哈希进行哈希处理, 加密 密码和方式 选择最佳的加密密码和模式超出了此答案的范围,但是最终的选择会影响加密密钥和初始化向量的大小; 在本文中,我们将使用AES-256-CBC,它的固定块大小为16个字节,密钥大小为16、24或32个字节。 加密金钥
  • nginx 1.9.7安装使用
    本文介绍nginx 1.9.7的安装,并启用http、https访问。By 泪痕之木实验环境 操作系统:CentOS 6.7IP:192.168.80.60主机名:CentOS6YUM软件包安装:CentOS默认提供的在线YUM源openssl版本:openssl-1.0.2d.tar.gz(openssl官网获取)nginx版本:nginx-1.9.7.tar.gz(nginx官网获取) 1 依赖包安装安装openssl和nginx之前,需要先安装一些依赖包:gcc、pcre、zlib1、nginx gzip模块需要zlib库2、nginx rewrite模块需要pcre库3、nginx ssl模块需要openssl库[root@centos6 ~]# yum install gcc\* pcre\* zlib\* –y2 Nginx安装将nginx和openssl源码包上传至服务器,这里上传到了 /root 目录openssl解压即可,并不需要安装[root@centos6 ~]# tar zxvf openssl-1.0.2d.tar.gz[root@centos6 ~]# tar zxvf nginx-1.9.7.tar.gz[root@centos6 ~]# cd nginx-1.9.7配置nginx安装选项[root@centos6 nginx-1.9.7]#
  • 双向加密:我需要存储可以检索的密码(Two-way encryption: I need to store passwords that can be retrieved)
    问题 我正在创建一个应用程序,该应用程序将存储用户可以检索和查看的密码。 密码用于硬件设备,因此无法检查哈希值。 我需要知道的是: 如何在PHP中加密和解密密码? 加密密码最安全的算法是什么? 我在哪里存储私钥? 除了存储私钥以外,要求用户在需要解密密码的任何时间都输入私钥是一个好主意吗? (可以信任此应用程序的用户) 密码可以通过什么方式被窃取和解密? 我需要注意什么? 回答1 就个人而言,我会像其他人一样使用mcrypt 。 但是还有更多需要注意的地方... 如何在PHP中加密和解密密码? 请参阅下面的强大课程,该课程可以为您解决所有问题: 加密密码最安全的算法是什么? 最安全? 任何一位。 如果要加密,最安全的方法是防止信息泄露漏洞(XSS,远程包含等)。 如果破解,攻击者最终可以破解加密(没有密钥,没有任何加密是100%不可逆的-正如@NullUserException指出的那样,这并不完全正确。有一些无法破解的加密方案,例如OneTimePad) 。 我在哪里存储私钥? 我要做的是使用3个键。 一个是由用户提供的,一个是特定于应用程序的,另一个是特定于用户的(例如盐)。 特定于应用程序的密钥可以存储在任何地方(在Web根目录之外的配置文件中,环境变量中等等)。 用户专用密码将存储在数据库中加密密码旁边的一列中。 用户提供的将不会被存储。 然后,您将执行以下操作: $key
  • 用Cocoa加密数据,用PHP解码(Encrypting data in Cocoa, decoding in PHP)
    问题 我要解决的情况:在我的Cocoa应用程序中,我需要使用对称密码对字符串进行加密,然后将其发布到PHP,然后让该脚本对数据进行解码。 该过程需要反向进行操作才能返回答案(PHP编码,可可解码)。 我遗漏了一些东西,因为即使我在PHP和Cocoa中都可以使密钥和初始化向量(iv)都相同,但是当一个应用程序将其编码数据发送给另一个应用程序时,解码永远不会起作用。 两者都可以对自己的数据进行很好的编码/解码(已验证以确保手头没有PEBKAC问题)。 我怀疑某个地方存在填充问题,我只是看不到它。 我的可可应用程序使用SSCrypto(这只是OpenSSL函数的便捷包装)进行编码。 密码为河豚,模式为CBC。 (原谅内存泄漏,代码已被剥夺了基本要点) NSData *secretText = [@"secretTextToEncode" dataUsingEncoding:NSUTF8StringEncoding]; NSData *symmetricKey = [@"ThisIsMyKey" dataUsingEncoding:NSUTF8StringEncoding]; unsigned char *input = (unsigned char *)[secretText bytes]; unsigned char *outbuf; int outlen, templen
  • “Invalid provider type specified” CryptographicException when trying to load private key of certificate(“Invalid provider type specified” CryptographicException when trying to load private key of certificate)
    问题 我正在尝试读取由第三方服务提供商与我共享的证书的私钥,因此在通过网络将其发送给他们之前,我可以使用它来对一些XML进行加密。 我正在C#中以编程方式进行操作,但是我认为这是一个权限或配置错误问题,因此我将重点关注似乎最相关的事实: 我认为这个问题与代码无关; 我的代码可在其他计算机上使用,并且此问题影响Microsoft的示例代码。 该证书是作为PFX文件提供的,仅用于测试目的,因此它还包括一个虚拟证书颁发机构。 使用MMC.exe,我可以将证书导入本地计算机的个人存储中,然后再将私钥授予所有相关帐户的权限,然后将证书颁发机构拖放到“受信任的根证书颁发机构”中。 使用C#,我可以加载证书(由其指纹识别),并使用X509Certificate2.HasPrivateKey验证它是否具有私钥。 但是,尝试读取密钥会导致错误。 在.NET中,尝试访问属性X509Certificate2.PrivateKey时会引发CryptographicException ,并显示消息“指定了无效的提供程序类型”。 在Win32中,调用方法CryptAcquireCertificatePrivateKey返回等效的HRESULT NTE_BAD_PROV_TYPE 。 这是使用Microsoft自己的两个代码示例读取证书的私钥时也会发生的相同异常。 在当前用户的等效存储区(而不是本地计算机
  • AES CTR 256加密在OpenSSL上的操作模式(AES CTR 256 Encryption Mode of operation on OpenSSL)
    问题 我是OpenSSL的新手,任何人都可以向我提示如何从C文件初始化AES CTR模式。 我知道这是方法的签名,但是我在参数方面遇到了问题,没有太多的文档,也没有清晰的示例说明如何进行简单的加密。 如果有人可以举例说明对此方法的调用,我将不胜感激。 提前致谢! void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out, const unsigned long length, const AES_KEY *key, unsigned char ivec[AES_BLOCK_SIZE], unsigned char ecount_buf[AES_BLOCK_SIZE], unsigned int *num); 嗨,Caf,我非常感谢您的快速回答,它非常有用,毫无疑问是我在网络上找到的最好的例子。 我试图打开一个长度不确定的文件,对其进行加密,并使用生成的密文写入另一个文件,然后打开该密文文件并恢复明文。 我需要使用大量MB的文件,因为我想对CPU的性能进行基准测试。 但是我在解密时仍然有问题。 不知何故,当解密大量的txt文件(1504KB)时,它并不能完全解密,我得到了一半的纯文本格式,另一半仍然加密。 我认为这可能与iv的大小或我打电话给柜台的方式有关。 这是我到目前为止的内容: #include
  • 如何加密和解密PHP字符串?(How do you Encrypt and Decrypt a PHP String?)
    问题 我的意思是: Original String + Salt or Key --> Encrypted String Encrypted String + Salt or Key --> Decrypted (Original String) 也许像这样: "hello world!" + "ABCD1234" --> Encrypt --> "2a2ffa8f13220befbe30819047e23b2c" (may be, for e.g) "2a2ffa8f13220befbe30819047e23b2c" --> Decrypt with "ABCD1234" --> "hello world!" 在PHP中,您该怎么做? 尝试使用Crypt_Blowfish ,但对我而言不起作用。 回答1 在您进一步进行操作之前,请尝试了解加密和身份验证之间的区别,以及为什么可能要使用经过身份验证的加密而不是仅加密。 要实施经过身份验证的加密,您需要先加密然后再加密MAC。 加密和身份验证的顺序非常重要! 这个问题的现有答案之一就是这个错误。 就像许多用PHP编写的密码库一样。 您应该避免实施自己的密码学,而应使用由密码学专家编写和审查的安全库。 更新:PHP 7.2现在提供libsodium ! 为了获得最佳安全性,请更新系统以使用PHP 7.2或更高版本
  • CryptoJS AES加密和Java AES解密(CryptoJS AES encryption and Java AES decryption)
    问题 我之所以这么问,是因为我已经阅读了两天的有关加密AES加密的许多帖子,而当我以为自己得到了它时,我意识到我根本没有得到它。 这篇文章与我的问题最接近,我有完全相同的问题,但未得到解答: CryptoJS AES加密和JAVA AES解密值不匹配 我已经尝试了很多方法来做,但是我做得还没对。 首先 我正在获取已经加密的字符串(我只得到了代码来查看他们的工作方式),因此修改加密方式不是一种选择。 这就是为什么所有类似的问题对我都不那么有用的原因。 第二 我确实可以访问该私钥,并且可以对其进行修改(因此,如有必要,可以选择调整长度)。 加密是在CryptoJS上完成的,并且它们将加密的字符串作为GET参数发送。 GetParamsForAppUrl.prototype.generateUrlParams = function() { const self = this; return new Promise((resolve, reject) => { const currentDateInMilliseconds = new Date().getTime(); const secret = tokenSecret.secret; var encrypted = CryptoJS.AES.encrypt(self.authorization, secret); encrypted
  • 您能帮我解决在C ++中使用rsa.h进行openssl公钥加密的问题吗?(Can you help me get my head around openssl public key encryption with rsa.h in c++?)
    问题 我正在尝试使用C ++中rsa的openssl实现来绕过公钥加密。 你能帮我吗? 到目前为止,这些都是我的想法(如有必要,请更正) 爱丽丝通过网络连接到鲍勃爱丽丝和鲍勃想要安全的通讯爱丽丝生成一个公钥/私钥对,并将公钥发送给鲍勃鲍勃接收公共密钥,并用公共密钥加密随机生成的对称密码(例如河豚),并将结果发送给爱丽丝爱丽丝使用最初生成的私钥解密密文,并获得对称的河豚密钥爱丽丝(Alice)和鲍勃(Bob)现在都知道对称的河豚钥匙,并且可以建立安全的通信渠道 现在,我研究了openssl / rsa.h rsa的实现(因为我已经对openssl / blowfish.h有实际经验),并且看到了以下两个功能: int RSA_public_encrypt(int flen, unsigned char *from, unsigned char *to, RSA *rsa, int padding); int RSA_private_decrypt(int flen, unsigned char *from, unsigned char *to, RSA *rsa, int padding); 如果Alice要生成* rsa,这如何产生rsa密钥对? 是否有像rsa_public和rsa_private这样的东西是从rsa派生的? * rsa是否同时包含公钥和私钥
  • Android应用的“密钥哈希”与任何存储的密钥哈希都不匹配(Android app Key Hash doesn't match any stored key hashes)
    问题 我在Play商店的生产环境中有一个应用程序,该应用程序使用Facebook SDK登录。 当我从Eclipse调试应用程序时,没有问题,但是在Facebook上向我询问权限后,在生产环境中出现以下错误。 我已经在developer.facebook.com的应用程序页面上添加了使用以下命令使用keytool生成的密钥哈希值: keytool -exportcert -alias diego -keystore“ C:\ Users \ Diego \ Desktop \ CeluChat.KeyStore” | “ C:\ openssl \ bin \ openssl.exe” sha1 -binary | “ C:\ openssl \ bin \ openssl.exe” base64 CeluChat.KeyStore是导出签名的应用程序时使用的密钥库,当keytool向我提示输入密码时,我在导出时输入了相同的密钥库。 但是使我投入生产的错误(从Play商店下载)是: 10-20 22:21:10.752:W / fb4a(:):BlueServiceQueue(5872):com.facebook.http.protocol.ApiException:密钥哈希VQ3XhZb5_tBH9oGe2WW32DDdNS0与任何存储的密钥哈希都不匹配。
  • 使用openssl加密和解密小文件(Encrypting and decrypting a small file using openssl)
    问题 我想用C / C ++编写一个小程序,该程序读取一个小文本文件,并使用“内部”密钥对其进行加密。 然后,我还想编写另一个小程序,该程序可以使用内部相同的密钥解密加密的文件。 我查看了openSSL网站并进行了搜索,但发现了一个不简单的示例,有人尝试过执行此操作吗? 回答1 理想情况下,您可以使用现有工具,例如ccrypt ,但是可以这样: #include <openssl/aes.h> /* ... */ { int bytes_read, bytes_written; unsigned char indata[AES_BLOCK_SIZE]; unsigned char outdata[AES_BLOCK_SIZE]; /* ckey and ivec are the two 128-bits keys necesary to en- and recrypt your data. Note that ckey can be 192 or 256 bits as well */ unsigned char ckey[] = "thiskeyisverybad"; unsigned char ivec[] = "dontusethisinput"; /* data structure that contains the key itself */ AES_KEY key; /
  • 使用PHP最简单的双向加密(Simplest two-way encryption using PHP)
    问题 在普通的PHP安装中进行双向加密的最简单方法是什么? 我需要能够使用字符串密钥加密数据,并在另一端使用相同的密钥进行解密。 安全性不像代码的可移植性那么重要,因此我希望能够使事情尽可能简单。 当前,我正在使用RC4实现,但是如果可以找到本机支持的内容,那么我可以节省很多不必要的代码。 回答1 编辑: 您确实应该使用openssl_encrypt()和openssl_decrypt() 正如Scott所说,Mcrypt并不是一个好主意,因为自2007年以来就没有进行过更新。 甚至还有RFC可以从PHP中删除Mcrypt-https://wiki.php.net/rfc/mcrypt-viking-funeral 回答2 重要提示:除非您有非常特殊的用例,否则不要加密密码,而应使用密码哈希算法。 当有人说他们在服务器端应用程序中加密密码时,他们要么不了解信息,要么描述了危险的系统设计。 安全地存储密码是与加密完全不同的问题。 被告知。 设计安全系统。 PHP中的可移植数据加密 如果您使用的是PHP 5.4或更高版本,并且不想自己编写加密模块,则建议您使用提供身份验证加密的现有库。 我链接的库仅依赖于PHP提供的功能,并且受到少数安全研究人员的定期审查。 (包括我自己。) 如果您的可移植性目标不能阻止要求PECL扩展,那么强烈建议您使用libsodium而不是用PHP编写的任何内容
  • OpenSSL DH密钥太小错误(OpenSSL DH Key Too Small Error)
    问题 我正在尝试使用简单的PERL脚本连接到关闭的服务器-空调 #!/usr/bin/perl use 5.10.1; use warnings; use strict; use IO::Socket::SSL; use IO::Socket::SSL qw/debug3/; my $sock = IO::Socket::SSL->new( PeerHost => '192.168.1.4', PeerPort => 2878, verify_hostname => 0, SSL_verify_mode => SSL_VERIFY_NONE, SSL_verifycn_scheme => undef ) or die "failed connect or ssl handshake: $!,$SSL_ERROR"; print "$sock\n"; 现在,这一切都很好,然后,我精确地更新了OpenSSL(libssl1.0.0),然后一切都松了下来: DEBUG: .../IO/Socket/SSL.pm:220: set domain to 2 DEBUG: .../IO/Socket/SSL.pm:1653: new ctx 1984680 DEBUG: .../IO/Socket/SSL.pm:363: socket not yet connected DEBUG:
  • Linux-加密和安全
    本章内容安全机制对称和非对称加密散列算法gpgPKI和CAopenssl证书管理ssh服务和dropbearaideSudoTCP WrappersPAM模块 墨菲定律墨菲定律:一种心理学效应,是由爱德华·墨菲(Edward A. Murphy)提出的,原话:如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导致灾难,则必定有人会做出这种选择主要内容:任何事都没有表面看起来那么简单所有的事都会比你预计的时间长会出错的事总会出错如果你担心某种情况发生,那么它就更有可能发生(经验:要写操作文档,一步一步怎么做) 安全机制信息安全防护的目标保密性 Confidentiality完整性 Integrity可用性 Usability可控制性Controlability不可否认性 Non-repudiation安全防护环节物理安全:各种设备/主机、机房环境(不能让外人随便进机房)系统安全:主机或设备的操作系统应用安全:各种网络服务、应用程序网络安全:对网络访问的控制、防火墙规则数据安全:信息的备份与恢复、加密解密管理安全:各种保障性的规范、流程、方法 安全安全***: STRIDESpoofing 假冒Tampering 篡改Repudiation 否认Information Disclosure 信息泄漏Denial of Service 拒绝服务Elevation of
  • 应用配置错误,无法登录Facebook:Android Facebook集成问题(App is misconfigured for Facebook login: Android Facebook integration issue)
    问题 我已经将我的应用程序与Facebook集成在一起,为此,我正在使用Facebook的Graph API。 我正在检索个人资料和朋友信息。 在装有Android 2.3(Gingerbread)的设备上,它运行良好,但是最近我的客户在尝试通过我的应用程序连接到Facebook时遇到了问题。 他的设备上装有Android 4.0(冰淇淋三明治)。 当他单击应用程序上的按钮将其带到Facebook登录屏幕时,登录后他会收到一条消息: 我的应用程序配置错误,无法登录Facebook。 按确定以返回到应用程序,而无需连接到Facebook。 无论是与Android版本有关还是什么,我都没有遇到什么问题。 我该如何解决这个问题? 回答1 我在Facebook工作,这是需要解决的重要问题。 针对此问题的另一个答案表明,禁用SSO非常不好,它将使您的应用程序向可能窃取用户的Facebook凭据的恶意应用程序开放。 该黑客会在没有SSO的情况下启动一个到Facebook的WebView对话框,并且用户必须在该对话框中输入其登录凭据。 恶意应用程序然后可以轻易地窃取此信息。 始终建议正确实施Facebook SSO,以确保您的应用程序安全并保护用户的敏感数据。 在添加此错误消息之前,该对话框将自动关闭而不会发出警告,并且会以静默方式失败。 我们添加了此错误消息
  • 如何将我的秘密密钥和密码安全地保存在版本控制系统中?(How can I save my secret keys and password securely in my version control system?)
    问题 我在版本控制系统中保留了重要的设置,例如开发和生产服务器的主机名和端口。 但是我知道,将秘密(例如私钥和数据库密码)保存在VCS存储库中是一种不好的做法。 但是密码-像其他设置一样-似乎应该对其进行版本控制。 那么,保持密码版本控制的正确方法是什么? 我想这将涉及保持在自己的“秘密设置”文件中的秘密,并且具有文件加密和版本控制。 但是什么技术呢? 以及如何正确地做到这一点? 有没有更好的方法可以完全解决这个问题? 我通常会问这个问题,但是在我的特定实例中,我想使用git和github存储Django / Python站点的秘密密钥和密码。 同样,当我使用git推/拉时,理想的解决方案也会做一些神奇的事情-例如,如果加密的密码文件更改了运行的脚本,该脚本会要求输入密码并将其解密到位。 编辑:为清楚起见,我问在哪里存储的生产秘密。 回答1 您完全想在保持版本控制的同时对敏感的设置文件进行加密是正确的。 正如您所提到的,最好的解决方案是Git在推送某些敏感文件时透明地对其进行加密,以便在本地(即在拥有证书的任何计算机上)可以使用设置文件,但Git或Dropbox或任何人都可以使用在VC下存储文件无法读取纯文本信息。 推/拉过程中的透明加密/解密教程 这个要点https://gist.github.com/873637展示了有关如何使用Git的sms /
  • 在C中读取和写入rsa密钥到一个pem文件(Reading and writing rsa keys to a pem file in C)
    问题 我正在编写一个C程序来生成RSA密钥,并将其写入文件,然后从中读取。 作业需要我以openssl格式生成文件。 因此,我选择了PEM。 现在,我具有以下用于创建文件的功能 rsa = RSA_new(); // These 3 keys are generated beforehand rsa->e = e; rsa->n = n; rsa->d = d; fp = fopen(pubkey_file, "w"); if(!PEM_write_RSAPublicKey(fp, rsa)) { printf("\n%s\n", "Error writing public key"); } fflush(fp); fclose(fp); fp = fopen(privkey_file, "w"); // pRsaKey = EVP_PKEY_new(); // EVP_PKEY_assign_RSA(pRsaKey, rsa); if(!PEM_write_RSAPrivateKey(fp, rsa, NULL, 0, 0, NULL, NULL)) // if (!PEM_write_PrivateKey(fp, pRsaKey, NULL, NULL, 0, 0, NULL)) { printf("\n%s\n", "Error writing private key");
  • 如何使用Java解码使用openssl aes-128-cbc编码的字符串?(How to decode a string encoded with openssl aes-128-cbc using java?)
    问题 我正在使用openssl使用以下命令对字符串进行编码: openssl enc -aes-128-cbc -a -salt -pass pass:mypassword <<< "stackoverflow" 结果给我一个编码后的字符串: U2FsdGVkX187CGv6DbEpqh/L6XRKON7uBGluIU0nT3w= 到目前为止,我只需要使用openssl对此进行解码,因此以下命令将返回先前编码的字符串: openssl enc -aes-128-cbc -a -salt -pass pass:mypassword -d <<< "U2FsdGVkX187CGv6DbEpqh/L6XRKON7uBGluIU0nT3w=" 结果: stackoverflow 现在,我需要在Java应用程序中解码编码的字符串。 我的问题是: 有谁可以提供给我一个简单的Java类来解码使用先前给定的openssl命令编码的字符串? 非常感谢。 回答1 使用Bouncy Castle库解决了该问题。 这是代码: package example; import java.util.Arrays; import org.apache.commons.codec.binary.Base64; import org.bouncycastle.crypto.BufferedBlockCipher
  • 如何在Python中解密OpenSSL AES加密的文件?(How to decrypt OpenSSL AES-encrypted files in Python?)
    问题 OpenSSL为AES加密提供了一个流行的(但不安全-见下文!)命令行界面: openssl aes-256-cbc -salt -in filename -out filename.enc Python以PyCrypto软件包的形式支持AES,但仅提供工具。 如何使用Python / PyCrypto解密使用OpenSSL加密的文件? 注意 这个问题曾经也涉及使用相同方案在Python中进行加密。 此后,我删除了该部分,以阻止任何人使用它。 请勿以这种方式加密更多数据,因为按照当今的标准,这些数据并不安全。 仅应使用解密,除了“向后兼容性”以外,没有其他原因,即没有其他选择时。 要加密吗? 如果可以的话,请使用NaCl / libsodium。 回答1 鉴于Python的流行,起初我很失望,没有找到这个问题的完整答案。 我花了很多时间在黑板上阅读不同的答案以及其他资源,以使其正确。 我认为我可以分享结果以供将来参考和审查。 我绝不是密码专家! 但是,以下代码似乎可以无缝运行: from hashlib import md5 from Crypto.Cipher import AES from Crypto import Random def derive_key_and_iv(password, salt, key_length, iv_length): d = d_i =