通过C#、Python和T-SQL的字节数组
主要问题: 我需要将python字节数组转换为T-SQL字节数组,有什么方法可以这样做吗 说明: 我想做到这一点:通过C#、Python和T-SQL的字节数组,c#,python,tsql,hash,C#,Python,Tsql,Hash,主要问题: 我需要将python字节数组转换为T-SQL字节数组,有什么方法可以这样做吗 说明: 我想做到这一点: 脚本(Python)使用字符串将Http Get发送到服务器 服务器API(C#)将字符串的哈希值作为字节[]返回 字符串的散列通过人工复制粘贴到数据库查询(T-SQL)中 服务器上的哈希由SHA256算法(UTF-8编码)生成,然后复制到字节数组中并返回。 Python使用urllib.request获取哈希,并将其返回给最终用户,最终用户将其复制到查询中。 我已经得到了散列和从
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())
编辑:
Human的查询将是:
insert into table(user_password)
values(HERECOMESPASSWORD)
因此,复制粘贴“XOHIMNOBHFR0OVVJCYPJ3GPQ1QQ73WKHVCH0VQTG=”复制到此处不会有这样的效果。Python的结果是字节数组的Base64编码表示。我知道这一点是因为,首先,在你有了一些经验之后,你很容易识别它。第二,因为HTTP是一种文本协议,所以您发送的任何数据都必须以某种方式进行文本编码 因此,必须获取该值并将其转换回C#中的字节数组。然后可以将它重新编码为十六进制的SQL 但是我想提醒您不要使用
SqlCommand
和SqlParameters
。如果用户粘贴了密码之类的东西会怎么样
); UPDATE [table] SET [user_password] = '..whatever..'
您可能会有sql注入漏洞。python结果是base64编码的,sql示例是十六进制的,这是sql在查询时的显示方式,但这只是字段中二进制数据的表示形式。这两个值可能是等价的,我没有检查,但您可能根本没有问题。好的,您必须对返回字节数组进行bas64解码,并执行以下两项操作之一:将其转换回十六进制格式的字符串(pain),或者更好,在SqlCommand中添加一个binary类型的SqlParameter,并将字节数组直接赋给它的值。@Crowcoder非常感谢,我误解了你的第一个评论。你是100%正确的,从base64到hex的转换是enoguh。请将您的评论作为答案发布,以便我可以将其标记为这样。你怎么知道这个结果是base64?
insert into table(user_password)
values(HERECOMESPASSWORD)
); UPDATE [table] SET [user_password] = '..whatever..'