gpt4 book ai didi

c# - 通过 C#、Python 和 T-SQL 的字节数组

转载 作者:太空宇宙 更新时间:2023-11-03 16:33:54 25 4
gpt4 key购买 nike

主要问题:

我需要将 python 字节数组转换为 T-SQL 字节数组,有什么办法吗?

说明:

我想实现这个:

  1. 脚本 (Python) 使用字符串将 Http Get 发送到服务器
  2. 服务器 API (C#) 将字符串的哈希值返回为 byte[]
  3. 字符串的哈希值通过人工复制粘贴到数据库查询中 (T-SQL)

服务器上的哈希通过SHA256算法(UTF-8编码)生成,然后复制到字节数组中并返回。Python 使用 urllib.request 获取哈希值,并将其返回给最终用户,最终用户将其复制到查询。我已经获得了用于散列和从服务器获取散列的算法(发布在最后)。

示例:

从脚本中,我将“密码”作为要散列的字符串发送,在服务器端散列如下所示:

94 136 72 152 218 40 4 113 81 208 229 111 141 198 41 39 115 96 61 13 106 171 189 214 42 17 239 114 29 21 66 216

在 python 中我的输出是

"XohImNooBHFR0OVvjcYpJ3NgPQ1qq73WKhHvch0VQtg="

但是如果我们将字节数组从服务器直接放入 T-SQL,它看起来像这样:

0x5E884898DA28047151D0E56F8DC6292773603D0D6AABBDD62A11EF721D1542D8

代码片段:

请忽略可能的异常等 - 这些是简化的方法。

哈希方法(C#)

using (var alg = SHA256.Create())
{
return alg.ComputeHash(Encoding.UTF8.GetBytes(password));
}

哈希返回方法(C#)

[HttpGet,ResponseType(typeof(byte[]))]
public IHttpActionResult GetPasswordHash(string toHash)
{
var hashed = password.Hash();
return Ok(hashed);
}

Python 脚本

import urllib
import urllib.request
api = "http://localhost:12302/api/"
password = input("Put password\t")
url = api+"/Utils/Hash?toHash=%s" % password
url = urllib.request.Request(url)
responseData = urllib.request.urlopen(url)
print(responseData.read())

编辑:

人类的查询将是:

insert into table(user_password) 
values(HERECOMESPASSWORD)

因此,将“XohImNooBHFR0OVvjcYpJ3NgPQ1qq73WKhHvch0VQtg=”复制粘贴到 HERECOMESPASSWORD 不会成功。

最佳答案

Python 的结果是字节数组的 Base64 编码表示形式。我知道这一点,因为,一方面,当你有一定的经验后,很容易认识到这一点。第二,因为 HTTP 是一种文本协议(protocol),所以您发送的任何数据都必须以某种方式进行文本编码。

因此,您必须获取该值并将其转换回 C# 中的字节数组。然后您可以将 SQL 重新编码为十六进制。

但我想提醒您不要使用 SqlCommandSqlParameters。如果用户粘贴密码和类似内容会怎样:

); UPDATE [table] SET [user_password] = '..whatever..'

您将存在 SQL 注入(inject)漏洞。

关于c# - 通过 C#、Python 和 T-SQL 的字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37374212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com