news 2026/10/25 16:05:13

代码骨架哈希能做什么,不能证明什么

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码骨架哈希能做什么,不能证明什么

把两个文件的AST压成一个SHA-256摘要,然后说“相似度85%”,中间缺了一整套定义。哈希能回答特定表示是否相同,不能直接回答相似程度,更不能判断代码许可是否合规。

先给“骨架”一个小而明确的定义

下面只取函数名、参数个数和结果个数。它忽略函数体、注释和变量名,因此相同摘要只表示这几个字段相同。这样的摘要适合做粗筛或提醒,不适合当成代码来源证明。

package main import ( "crypto/sha256" "fmt" "go/ast" "go/parser" "go/token" "strings" ) func arity(f *ast.FieldList) int { if f == nil { return 0 } n := 0 for _, field := range f.List { if len(field.Names) == 0 { n++ } else { n += len(field.Names) } } return n } func skeleton(src string) ([32]byte, error) { f, err := parser.ParseFile(token.NewFileSet(), "sample.go", src, 0) if err != nil { return [32]byte{}, err } var b strings.Builder for _, decl := range f.Decls { if fn, ok := decl.(*ast.FuncDecl); ok { fmt.Fprintf(&b, "%s:%d:%d;", fn.Name.Name, arity(fn.Type.Params), arity(fn.Type.Results)) } } return sha256.Sum256([]byte(b.String())), nil } func main() { a, e1 := skeleton("package p; func Add(a,b int) int {return a+b}") b, e2 := skeleton("package p; func Add(x,y int) int {return 0}") c, e3 := skeleton("package p; func Add(x int) int {return x}") if e1 != nil || e2 != nil || e3 != nil { panic("parse") } if a != b || a == c { panic("skeleton semantics") } fmt.Println("same signature, different behavior: same skeleton hash") }

图示为抽象处理流程;本例只取函数签名字段,图中摘要是缩略符号,不能作为真实校验值。

两个行为明显不同的函数得到相同摘要,并非SHA-256发生碰撞,而是进入摘要的数据原本就一样。把丢失的信息怪到哈希算法上,会让改进方向完全跑偏。

如果真的需要相似检索

需要先定义特征、归一化方式、相似度以及误报漏报成本。MinHash通常用来估计集合相似度,仍需说明集合如何构造;不能用一个函数名就替代完整方法。还需要带人工标签的样本,才能讨论阈值是否有用。

许可判断则是另一件事。发现候选片段后,应核对上游仓库、提交、许可证和使用方式。GitHub对代码引用的说明也没有把引用索引描述成所有公开代码的完整集合。没有命中不等于不存在来源,有命中也不能跳过许可义务。

这个程序仅验证了“摘要反映所选表示”的边界,没有实现MinHash、抄袭检测或法律判断。给小工具一个准确名字,往往比给它一个夸张阈值更能帮助使用者。

参考

  • Go parser
  • GitHub:Copilot与代码引用边界
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/25 15:59:41

分布外泛化(OOD)综述:从表示、模型到优化的方法体系与评估避坑

简介:这份资源是清华大学崔鹏团队等撰写的《Towards Out-Of-Distribution Generalization: A Survey》综述论文PDF,面向深度学习研究者、算法工程师及关注模型鲁棒性的高年级学生,系统回应现实场景中训练与测试分布不一致、i.i.d.假设难以成立…

作者头像 李华
网站建设 2026/10/25 15:47:15

ibaAnalyzer实战:从数据读取到批处理导出的完整指南

简介:ibaAnalyzer_v7.3.5 是面向工业数据分析与测量数据处理人员的专业分析工具安装包,适合从事设备信号分析、测试数据评估及系统性能排查的工程师使用。压缩包共 5 个文件,约 127.82MB,包含 64 位与 32 位两套 Windows 安装程序…

作者头像 李华
网站建设 2026/10/25 15:39:15

视觉语言模型对象幻觉问题:认知不确定性检测与抑制方法

1. 项目概述:视觉语言模型中的对象幻觉问题研究2025年NIPS会议上这篇关于视觉语言模型中对象幻觉问题的论文,直指当前多模态AI系统的一个核心痛点——当模型面对模糊或缺失的视觉信息时,会"自信地"生成实际上并不存在的物体描述。这…

作者头像 李华
网站建设 2026/10/25 15:33:00

YOLOv9四分类路面状态数据集实战与避坑指南

简介:面向智能交通、自动驾驶及道路养护场景的雨雪天气路面状况数据集,覆盖结冰路面、雪地、下雨湿滑与干燥路面四类典型路况,可用于训练和评估YOLOv9等目标检测模型,适合算法工程师、科研人员以及计算机视觉学习者使用。整体zip压…

作者头像 李华
网站建设 2026/10/25 15:30:20

YOLOv8自定义数据集训练实战:从数据准备到模型部署

1. 项目概述:YOLOv8自定义数据集训练全流程实战在目标检测领域,YOLOv8作为Ultralytics公司推出的最新版本,凭借其卓越的速度-精度平衡和开发者友好特性,已成为工业界和学术界的首选框架之一。不同于官方文档中标准化的演示流程&am…

作者头像 李华
网站建设 2026/10/25 15:15:25

CEEMDAN算法实战:从EMD到CEEMDAN的信号分解与故障诊断

简介:这份资源聚焦CEEMDAN算法,即完全自适应噪声集合经验模态分解,是EMD与EEMD的进一步改进方案,面向从事非线性、非平稳信号处理的研究生、工程师与科研人员,可用于地震波解析、心电与脑电分析、金融时序波动识别及机…

作者头像 李华