文件的 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日,多次拨打王天一、王跃飞,及上述浙江籍中国象棋特级大师的电话,始终未有人接听。

出师表

诸葛亮(三国)

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

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

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

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

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

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

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

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

诫兄子严敦书

马援(东汉)

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

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