更新时间:2026-03-04 GMT+08:00
ProofCode生成步骤
端侧和服务端使用相同的文件片段计算摘要,当两边计算的摘要值相同,则表示用户拥有文件,避免出现通过文件sha256撞库其他用户文件。例外情况,当文件大小为0时,不需要计算该值。
步骤1:生成存储证明种子(ProofSeed)
ProofSeed = HexEncode(SHA256(originValue))
- originValue:当使用appid的方案认证鉴权时,从请求头X-User-Id取值,其他认证鉴权方案从请求头Authorization取值。
- SHA256(String):对于任意长度的消息,SHA256都会产生一个256位的哈希值,称作消息摘要。
- HexEncode(ByteArray):表示以小写字母形式返回摘要的Base-16编码的函数。输入的每一个字节都表示为两个十六进制字符。
步骤2:确定参与计算存储证明的文件二进制片段
计算出参与计算的文件二进制的开始(start)和结束位置(end)。
Start = LongValueUnsigned(ByteSub(SHA256(ProofSeed),24,32))%size; End = Start+8>=Size?Size:Start+8;
- SHA256(String)对于任意长度的消息,SHA256都会产生一个256位的哈希值,称作消息摘要。
- ByteSub(ByteArray,Integer,Integer)表示从摘要值截取区间指定区间的Byte。该场景SHA256会返回32Byte,取摘要值的后8Byte,即[24,32)区间对应的Byte。
- LongValueUnsigned (BitSet)表示将字节数组转换成8字节的整形值。该函数在实现时必须去掉第一个byte的符号位,保证返回一个正整数。
- size表示文件的大小(单位Byte)。
- 参与计算存储证明的文件二进制片段即[Start,End)区间对应的文件二进制的片段。
步骤3:计算存储证明
根据二进制片段,从文件的二进制数据的对应位置取出对应的数组。
Data = readFile(file, start, end); proofCode = HexEncode(SHA256(Data))
- readFile(File,Integer,Integer):表示从文件的指定范围读取字节数组。
- SHA256(ByteArray) :对于任意长度的消息,SHA256都会产生一个256位的哈希值,称作消息摘要。
- HexEncode(ByteArray):表示以小写字母形式返回摘要的Base-16编码的函数。输入的每一个字节都表示为两个十六进制字符。
父主题:附录

