openssl 对任何大小的密钥都开放

2023-12-13

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

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

openssl 如何与密钥一起工作...程序是什么...

这取决于程序,但整个库中的程序通常是一致的。在您的示例中,您正在使用openssl dec,所以你正在使用dec子程序。源代码可在<openssl dir>/apps/enc.c (enc and dec是一部分enc.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如下所示,十六进制解码通过传入的参数-K。它通过以下方式用 0 填充未使用的长度memset。未使用的长度是EVP_MAX_KEY_LENGTH减去长度-K参数(十六进制解码后)。

最后,在第 610 行附近:

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

Note: -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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openssl 对任何大小的密钥都开放 的相关文章

随机推荐

  • A a() 是什么意思? [复制]

    这个问题在这里已经有答案了 考虑这段代码 include
  • 角度材质对话框显示两次

    我使用 Leaflet 绘制地图 并尝试使用 Angular Material 来显示一些模态 但遇到了问题 模态 ModalComponent 应该在用户单击地图时打开 我为此添加了单击事件 请参阅MapComponent 在这个事件中
  • 将py文件转换为exe,找不到现有的PyQt5插件目录

    我对 phyton 很陌生 刚刚完成了我的第一个应用程序 现在 我正在尝试将我的 py 文件编译为似乎不起作用的 exe 购买 我到处寻找解决我问题的方法 但似乎找不到 当我运行此命令时 pyinstaller gui py 显示此错误 4
  • MPMediaItem - MPMediaItemArtwork 的 NSCoding 问题

    因此 MPMediaItem 符合 NSCoding 但它包含一个指向 MPMediaItemArtwork 的指针 该指针不符合 NSCoding 因此 如果我尝试存档 MPMediaItem 如果该项目中有一些艺术品 则它将无法取消存档
  • 如何在C#中调用C++ DLL

    我用 dev C 编写了一个 DLL 该DLL的名称是 DllMain dll 它包含两个函数 HelloWorld and ShowMe 头文件如下所示 DLLIMPORT void HelloWorld DLLIMPORT void S
  • Javascript 对象打印为对象对象

    我对节点和 mongo db 都非常陌生 我正在创建从节点到 Mongo 的连接并尝试 CRUD 操作 我的操作在 Operations js 中定义 并且我从索引调用函数 我面临的问题是当我打印回调参数时 coll find toarra
  • NumPy 数学函数比 Python 更快吗?

    我有一个由基本数学函数 abs cosh sinh exp 组合定义的函数 我想知道使用它是否会产生影响 速度 例如 numpy abs 代替abs 以下是计时结果 lebigot weinberg python m timeit abs
  • pdfmake 中未显示页脚

    我有以下代码 可在单击 pdf 时生成数据表 pdf 在自定义功能中 我有一个页脚代码 应该显示页码 document ready function SHOW EXSITING LINE ITEMS var id Model Order I
  • 如何将 Visual Studio 项目作为安装程序发布/部署

    我刚刚为一家公司开发了一个系统 它将用于 50 多台 PC 剩下的唯一问题是安装过程 我认为手动复制项目的整个文件夹效率不高 例如在 Documents 文件夹中 并在每台 PC 上创建 exe 文件的桌面快捷方式 如果可以的话我想压缩一下
  • 使用 C++20 中派生的“使用”CRTP

    我正在尝试了解 CRTP 和 C 20 基本上 我想要拥有可以访问派生类型的静态继承typedefs and using template
  • 有什么方法可以“提交” Redux 中的状态以释放内存吗?

    我正在尝试实时多人游戏我在服务器和客户端上都使用 Redux 来存储应用程序的状态 但是 由于我的游戏是实时的 因此发送到商店的操作量明显高于通常的应用程序 我怀疑这就是 Redux 使用大量内存的原因 据我了解 Redux 将所有分派到内
  • Referrer 策略隐藏自签名证书的 Referrer

    我似乎无法通过自签名证书向开发服务器发出第 3 方 XHR 请求的引荐来源网址 在遵守 Chrome 使用 SAN 而不是 CN 并注册我的自签名本地主机证书后 我在开发工具安全面板中获得了此请求的绿点 但我还得到了以下信息 This re
  • 为什么这个TStreamAdapter没有被释放?

    比较这两个片段 d as IPersistStream Save TStreamAdapter Create TFileStream Create test bin fmCreate soOwned true d as IPersistSt
  • DOMDocument->saveHTML() 将 转换为空格

    在我的代码中 我有 document DomDocument gt loadHTML someHTML xPath new DOMXPath document do some xpath query and processing resul
  • 如何在 WPF 中扩展样式

    我将默认按钮设置为如下所示
  • 在各种函数中使用push_back更新类对象的向量

    我有一个通过读取数据文件在 main 中创建的类对象向量 然后 我将向量传递到几个不同的文件 其中包含对向量执行不同操作的函数 按不同字段排序 减去库存等 当我尝试使用时遇到问题push back在创建矢量后将其添加到另一个文件 同一项目的
  • RDBMS:将频繁更新的列移动到单独的表中

    我有一个用户表 简化 UserId int PK Username PasswordHash LastVisitTimestamp 每次用户访问网站时 LastVisitTimestamp 列都会更新 将该列移动到单独的表中是否是一个好主意
  • 在 Mac OS X 10.7.2 上用 C++ 编译基本 CGAL 程序

    当我尝试编译 Voronoi Diagram 2 示例时 我得到以下输出 singhg Programming examples Voronoi diagram 2 cmake DCGAL DIR opt local lib cmake C
  • 如何在 VS 2013 中调试 CLR 存储过程

    我尝试了不同的方法来完成这项工作 但没有任何效果 当我运行测试脚本时 VS 似乎忽略了 cs 文件中的所有断点 我也在测试脚本中包含了一个断点 但仍然无法调试 这是微软的指南https msdn microsoft com en us li
  • openssl 对任何大小的密钥都开放

    openssl 如何处理密钥 因为它采用任意大小的密钥 1 字节到任意大小 此处转到实际密钥的程序是什么 openssl enc d des ecb in cipher txt out text out K 5303434123123454