文件的 Hash 算法

‘计算 MD2、MD3、MD4、MD5、SHA1 等散列值。

Option Explicit
Private Declare Function CryptAcquireContext Lib “advapi32.dll” Alias “CryptAcquireContextA” (ByRef phProv As Long, ByVal pszContainer As String, ByVal pszProvider As String, ByVal dwProvType As Long, ByVal dwFlags As Long) As Long
Private Declare Function CryptReleaseContext Lib “advapi32.dll” (ByVal hProv As Long, ByVal dwFlags As Long) As Long
Private Declare Function CryptCreateHash Lib “advapi32.dll” (ByVal hProv As Long, ByVal Algid As Long, ByVal hKey As Long, ByVal dwFlags As Long, ByRef phHash As Long) As Long
Private Declare Function CryptDestroyHash Lib “advapi32.dll” (ByVal hHash As Long) As Long
Private Declare Function CryptHashData Lib “advapi32.dll” (ByVal hHash As Long, pbData As Any, ByVal dwDataLen As Long, ByVal dwFlags As Long) As Long
Private Declare Function CryptGetHashParam Lib “advapi32.dll” (ByVal hHash As Long, ByVal dwParam As Long, pbData As Any, pdwDataLen As Long, ByVal dwFlags As Long) As Long
Private Const PROV_RSA_FULL = 1
Private Const CRYPT_NEWKEYSET = &H8
Private Const ALG_CLASS_HASH = 32768
Private Const ALG_TYPE_ANY = 0
Private Const ALG_SID_MD2 = 1
Private Const ALG_SID_MD4 = 2
Private Const ALG_SID_MD5 = 3
Private Const ALG_SID_SHA1 = 4
Enum HashAlgorithm
MD2 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD2
MD4 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD4
MD5 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD5
SHA1 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_SHA1
End Enum
Private Const HP_HASHVAL = 2
Private Const HP_HASHSIZE = 4

Function HashFile(ByVal FileName As String, Optional ByVal Algorithm As HashAlgorithm = MD5) As String
Dim hCtx As Long
Dim hHash As Long
Dim lFile As Long
Dim lRes As Long
Dim lLen As Long
Dim lIdx As Long
Dim abHash() As Byte
If Len(Dir$(FileName)) = 0 Then Err.Raise 53
lRes = CryptAcquireContext(hCtx, vbNullString, vbNullString, PROV_RSA_FULL, 0)
If lRes = 0 And Err.LastDllError = &H80090016 Then
lRes = CryptAcquireContext(hCtx, vbNullString, vbNullString, PROV_RSA_FULL, CRYPT_NEWKEYSET)
End If
If lRes <> 0 Then
lRes = CryptCreateHash(hCtx, Algorithm, 0, 0, hHash)
If lRes <> 0 Then
lFile = FreeFile
Open FileName For Binary As lFile
If Err.Number = 0 Then
Const BLOCK_SIZE As Long = 32 * 1024& ‘ 32K
ReDim abBlock(1 To BLOCK_SIZE) As Byte
Dim lCount As Long
Dim lBlocks As Long
Dim lLastBlock As Long
lBlocks = LOF(lFile) \ BLOCK_SIZE
lLastBlock = LOF(lFile) – lBlocks * BLOCK_SIZE
For lCount = 1 To lBlocks
Get lFile, , abBlock
lRes = CryptHashData(hHash, abBlock(1), BLOCK_SIZE, 0)
If lRes = 0 Then Exit For
Next
If lLastBlock > 0 And lRes <> 0 Then
ReDim abBlock(1 To lLastBlock) As Byte
Get lFile, , abBlock
lRes = CryptHashData(hHash, abBlock(1), lLastBlock, 0)
End If
Close lFile
End If
If lRes <> 0 Then
lRes = CryptGetHashParam(hHash, HP_HASHSIZE, lLen, 4, 0)
If lRes <> 0 Then
ReDim abHash(0 To lLen – 1)
lRes = CryptGetHashParam(hHash, HP_HASHVAL, abHash(0), lLen, 0)
If lRes <> 0 Then
For lIdx = 0 To UBound(abHash)
HashFile = HashFile & _
Right$(“0” & Hex$(abHash(lIdx)), 2)
Next
End If
End If
End If
CryptDestroyHash hHash
End If
End If
CryptReleaseContext hCtx, 0
If lRes = 0 Then Err.Raise Err.LastDllError
End Function

既涉嫌“买棋”又涉嫌“卖棋” “中国象棋第一人”王天一被批准逮捕

经济观察网 记者 李微敖 2024年8月1日至23日,多位知情者向经济观察网记者确认,有“中国象棋第一人”之称的象棋特级大师王天一,已被杭州检方批准逮捕。除王天一之外,还有其他中国象棋特级大师,亦被调查。

上述知情者亦介绍,王天一所涉及的事项,既涉嫌在比赛中“买棋”,即自己或者通过另一位中国象棋特级大师王跃飞给予对手好处,以赢得比赛,获取象棋等级分排名优势;还涉嫌“卖棋”,即收受对手钱财,在比赛中故意输棋。其中,王天一和王跃飞涉嫌“买棋”的金额,累计超过了80万元人民币。

王天一,1989年4月23日出生于北京,其从小就展现出象棋天赋。2008年,王天一被北京大学录取,就读于信息管理专业。2012年10月,王天一获得全国象棋个人赛冠军,成为中国第十六位男子全国象棋冠军棋手,并晋升为象棋特级大师。

从2014年开始,王天一连续十一年,居中国象棋棋手等级分全国第一名;其中2023年,他的等级分达到了2800分,为中国象棋施行等级分以来的历史新高,因此王天一也被誉为“中国象棋第一人”。

2018年3月,王天一正式加入中国棋院杭州分院。彼时,王天一公开称自己是“从合同工升级为正式工”。

中国棋院杭州分院是中国棋院在国内的唯一分院,由国家体育总局棋牌运动管理中心在2004年正式批复同意成立,拥有围棋、中国象棋、国际象棋三大棋类的专业队伍。

王天一的职业生涯,也不乏丑闻。

2012年9月,在河南省举行的第七届全国农民运动会上,王天一改名换姓为“王天弈”,假冒农民身份参赛,获得男子象棋快棋冠军。但事后被揭发,王天一公开道歉。

2023年4月前后,两位中国象棋特级大师王跃飞与郝继超的一段通话录音,在网络上开始传播。

这段录音中,两人提及王天一,并谈到王跃飞、王天一参与“买棋”,操纵象棋比赛之事,并疑似提到使用“特殊手段”在比赛中作弊。

这段录音迅速在中国象棋界及象棋爱好者中引起轩然大波,并被称为“录音门事件”。

同年10月17日,时年73岁的中国象棋特级大师,有“棋王”之誉的柳大华公开实名举报时任国家体育总局棋牌运动管理中心副主任郭莉萍。

柳大华在举报中称,“长期以来,她(即郭莉萍,记者注)包庇纵容中国象棋界的黑恶势力,公然使用电脑软件以及现代科技手段,操纵包办国内各种大型比赛的胜负与奖金分配,使得中国象棋这一中华民族文化瑰宝,沦落为一小撮棋界败类买卖胜负、受贿牟利的工具。”

柳大华还称,“长期以来,郭莉萍对中国象棋界的这一惊天丑闻,不查不问,反而对挺身揭露丑闻的运动员、教练员进行百般打压、打击报复。”

有知情者对经济观察网记者表示,“棋王”柳大华对郭莉萍的实名举报,使得“录音门事件”等中国象棋界存在的种种争议和乱象,更广为人知;同时,也引起了高层的关注,一定程度上推动了“录音门事件”的调查。

2024年6月,数位知情者向经济观察网记者证实,2024年4月23日,王天一接受警方调查,其办案单位包括杭州警方的经侦部门。而这一天,也恰恰是王天一的35岁生日。

彼时,王天一涉嫌的罪由包括“非国家工作人员受贿”。在2018年,王天一正式加入中国棋院杭州分院之前,他的身份是非国家工作人员。

2024年6月,经济观察网记者也联系到了柳大华实名举报的郭莉萍。她回复称,自己已调离国家体育总局棋牌运动管理中心,对于柳大华的指控,她不方便回应,需要等待组织的正式答复,“相信最后会有结论的”。

2024年8月1日至23日,数位知情者向经济观察网记者进一步确认,王天一已被杭州检方批准逮捕。除王天一之外,还有其他中国象棋特级大师,亦被调查。

王天一所涉及的事项,既涉嫌在比赛中“买棋”,即自己或者通过另一位中国象棋特级大师王跃飞给予对手好处,以赢得比赛,获取象棋等级分排名优势;还涉嫌“卖棋”,即收受对手钱财,在比赛中故意输棋。其中,王天一和王跃飞涉嫌“买棋”的金额,累计超过了80万元人民币。

另一位接近案情的知情人士则告诉经济观察网记者,王天一给予一位浙江籍中国象棋特级大师一场比赛的“让棋费”(好处费),达到20万元。该象棋特级大师前后三次被警方带走调查,其中第三次是在2024年7月初,此后他一直处于“失联”状况。

前述知情人士还介绍,公安机关在办理王天一案中,曾遇到比较多的干扰因素,后来此案“升格”,由上级公安部门督办。

经济观察网记者从2024年7月初至8月23日,多次拨打王天一、王跃飞,及上述浙江籍中国象棋特级大师的电话,始终未有人接听。

出师表

诸葛亮(三国)

  先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。

  宫中府中,俱为一体;陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。

  侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。

  将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。

  亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。

  臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。

  先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明;故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。

  愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏。臣不胜受恩感激。今当远离,临表涕零,不知所言。

诫兄子严敦书

马援(东汉)

援兄子严、敦,并喜讥议,而通轻侠客。援前在交趾,还书诫之曰:“吾欲汝曹闻人过失,如闻父母之名:耳可得闻,口不可得言也。好议论人长短,妄是非正法,此吾所大恶也:宁死,不愿闻子孙有此行也。汝曹知吾恶之甚矣,所以复言者,施衿结缡,申父母之戒,欲使汝曹不忘之耳!

“龙伯高敦厚周慎,口无择言,谦约节俭,廉公有威。吾爱之重之,愿汝曹效之。杜季良豪侠好义,忧人之忧,乐人之乐,清浊无所失。父丧致客,数郡毕至。吾爱之重之,不愿汝曹效也。效伯高不得,犹为谨敕之士,所谓‘刻鹄不成尚类鹜’者也。效季良不得,陷为天下轻薄子,所谓‘画虎不成反类狗’者也。讫今季良尚未可知,郡将下车辄切齿,州郡以为言,吾常为寒心,是以不愿子孙效也。”

东汉伏波将军马援

东汉时期名将辈出,比如燕然勒石的窦宪,还有收复西域五十多国的班超,此外还有一个人虽然声名不显,但战绩斐然,他就是马援。
马援,东汉初期著名军事家,出生于公元前14年,扶风郡(今陕西一带)人,曾祖父马通是汉武帝时期的大臣,父亲马仲曾官至玄武司马。
马援年少时就胸怀大志,常常想着干出一番大事业。西汉末年王莽篡政,建立新朝,天下大乱,军阀四起,马援投靠了陇西军阀隗嚣,后又投靠光武帝刘秀,为稳固东汉政权立下赫赫战功。

归顺刘秀后,马援开始南征北战。建武十一年(公元35年)刘秀任命马援为陇西太守,平定塞外羌族叛乱,马援率步骑兵三千余人在甘肃临洮大败羌人,斩敌数百人,俘获牛羊上万头,八千多名羌人望风而降。
公元37年,羌人再次叛乱。马援奉命率四千余人前去平乱,切断羌人水源,羌人不敢与汉军决战,首领带领几十万户人逃到塞外,剩下的人选择了投降,羌族叛乱再次被平定。

公元40年,征侧、征贰两姐妹在交趾郡起兵造反,公然与东汉为敌,交趾各部族纷纷响应,叛军在短时间内占领东汉岭南一带六十多座城池,声势浩大。
公元42年,光武帝刘秀任命马援为伏波将军,领兵平定交趾叛乱。马援领兵到达岭南后,一路势如破竹,大败交趾叛军,斩敌数千人,降者过万。公元43年,马援斩首叛军首领征侧、征贰两姐妹,平定交趾叛乱,因军功被封为新息侯。

平定交趾后,马援下令在当地立下两根铜柱作为汉朝最南的边界,并在铜柱上刻上“铜柱折,交趾灭”六个大字,警告交趾人不要毁坏铜柱。马援立铜柱的地方一般认为在现在越南中部的广平,广治一带,这两根铜柱让交趾人近百年不敢作乱,直到东汉末年中原大乱,交趾人才再次起兵造反。
公元48年,武陵郡五溪蛮发生叛乱,刘秀派武威将军刘尚前去平定叛乱,不料刘尚轻敌大意,竟然全军覆没。这时已经62岁高龄的马援请求领兵出战,公元49年马援领兵击败叛乱蛮兵,斩敌两千余人,叛军逃入深山, 据险而守。
当时天气酷热,很多汉军都染上暑疫身亡,马援也染上了疾病,但每天仍然坚持带病巡查。当时马援军中有个叫耿舒的将领,因为与马援不合,就给刘秀写信状告马援指挥不利,导致汉军受挫。

刘秀收到信后,立即派中郎将梁松前去问责马援,并代为监管军队。不过等梁松到时,马援已经病死了。这梁松也一直与马援不合,于是趁此机会大肆诬陷马援,罗列了很多莫须有的罪证,马援已死,自然没法为自己辩驳。
刘秀收到梁松罗列的马援罪证后,勃然大怒,下令收回马援新息侯的印绶,剥夺他的爵位,直到二十多年后,汉章帝上位后才得以平反,追谥“忠成”,唐朝时被列为武庙六十四将之一。
马援戎马一生,死后却被剥夺爵位,这对他来说是极不公平的,也是极其可悲的。历朝历代都不缺乏搬弄是非的小人,甚至不少朝代都亡在了一些小人手上,不过好在马援最终被平冤昭雪,还他了一个清白。