RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-406762

Ярослав's questions

Martin Hope
Slave
Asked: 2025-02-13 09:39:59 +0000 UTC

根据 GOST 计算哈希值

  • 5

需要使用 GOST 34.11 算法来计算哈希值。文档中有一个计算示例:

<ds:Reference URI="#id-9a89bcea-eb0d-41f2-a8e8-405ad5ea0d62">
              <ds:Transforms>
                 <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
              </ds:Transforms>
              <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/>
              <ds:DigestValue>STvOHkqaWjQbVCkB7mnG++RLLdGmjryqTqS+BcZx4Cg=</ds:DigestValue>
           </ds:Reference>

所引用文件的范围:

<a:To wsu:Id="id-9a89bcea-eb0d-41f2-a8e8-405ad5ea0d62" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">https://ips.test.egisz.rosminzdrav.ru/57234d87b0838</a:To>

我还没有弄清楚要使用什么算法来获取哈希值(2012 年 11 月 34 日或 1994 年 11 月 34 日)。以下是 2012 年 11 月 34 日的代码(pygost 库:https://github.com/ilyaTT/pygost_0_15/tree/master):

from lxml import etree
from pygost.gost3411_12 import GOST341112
import base64

data = '''<a:To wsu:Id="id-9a89bcea-eb0d-41f2-a8e8-405ad5ea0d62" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:a="http://www.w3.org/2005/08/addressing">https://ips.test.egisz.rosminzdrav.ru/57234d87b0838</a:To>'''

parser = etree.XMLParser(remove_blank_text=True)
xml_tree = etree.fromstring(data.encode("utf-8"), parser)

canonical_xml = etree.tostring(xml_tree, method="c14n", exclusive=True).decode("utf-8")

canonical_base64 = base64.b64encode(canonical_xml.encode("utf-8")).decode("utf-8")
data_bytes = canonical_base64.encode("utf-8")[::-1]

# Хэшируем
gost_hash = GOST341112(digest_size=256)
gost_hash.update(data_bytes)
signature_hash = gost_hash.digest()[::-1]

# Хэш в шестнадцатеричной строке
hex_string = signature_hash.hex()
print("HEX:", hex_string)

new_value = base64.b64encode(signature_hash).decode()
print("BASE64:", new_value)

程序中获得的哈希值与样本中的哈希值不匹配。

GOST 34.11-1994 的实施:

from lxml import etree
from pygost.gost3411_94 import GOST341194
import base64

# Исходный XML-документ
xml_data = '''<a:To wsu:Id="id-9a89bcea-eb0d-41f2-a8e8-405ad5ea0d62" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">https://ips.test.egisz.rosminzdrav.ru/57234d87b0838</a:To>'''

root = etree.fromstring(xml_data)

# Канонизируем (c14n)
data_to_hash = etree.tostring(root, method="c14n", exclusive=True, with_comments=False)

print(type(data_to_hash))

print(data_to_hash)

# Вычисляем хэш (ГОСТ Р 34.11-94)
gost_hash = GOST341194(data_to_hash)
digest_value = gost_hash.digest()

digest_base64 = base64.b64encode(digest_value).decode()
print("DigestValue:", digest_base64)

得到了哈希:“ost9NriBuOVw2DKHUiKThCpIVkk2HITA0v6cMWv16mU=”但它应该是:“STvOHkqaWjQbVCkB7mnG++RLLdGmjryqTqS+BcZx4Cg=”

python
  • 1 个回答
  • 100 Views
Martin Hope
Ярослав
Asked: 2022-06-27 02:15:05 +0000 UTC

需要将一个数组写入另一个长度较小的数组

  • 0

我正在尝试创建一个新数组并将其覆盖在另一个数组中,但是在输出时,除了覆盖数组之外,还会将垃圾推入其中(数组 t)您不能使用函数来处理字符串。我才编程一周,如果还有写代码的意见,那就写吧。

#include <iostream>

using namespace std;

char* get_string(int* len) {
    int capacity = 1;
    char* s = (char*)malloc(sizeof(char));
    char c = getchar();
    while (c != '\n') {
        s[(*len)++] = c;
        if (*len >= capacity) {
            capacity *= 2;
            s = (char*)realloc(s, capacity * sizeof(char));
        }
        c = getchar();
    }
    s[*len] = '\0';
    return s;
}

char* obrabotka_size(int* len,char* f1,int size) {
    int capacity = 1;
    char* t = (char*)malloc(sizeof(char));
    for (int i = 0; i < size;i++){
        t[i] = f1[i];

    }
    cout << "\nt=" << t;
    return t;
}

int  main() {
    int size=0;
    setlocale(LC_ALL, "RUSSIA");
    int len=0;
    char* f1 = get_string(&len);
    cout << "\nf1=" << f1;
    cout << "\nSIZEOF: " << sizeof(f1);
    cout << "\nSize stroki: ";
    cin >> size;
    char* f2 = obrabotka_size(&len,f1,size);
    cout << "\nf2=" << f2 << endl;
    cout << "\nf1=" << f1 << endl;
    delete[] f1;
    return 0;
}
c++ массивы
  • 1 个回答
  • 62 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5