当前位置: 首页 > article >正文

国密滑块登录实战:SM2+SM4密码链路全解析

1. 这不是“加个密”那么简单滑块登录里藏着的国密链路真相你有没有试过在某个政务类App或银行类Web端拖动滑块完成登录后页面瞬间跳转但控制台Network面板里却找不到任何明文密码字段甚至抓包发现提交的只是一串看似随机的base64字符串长度固定、结构规整且每次滑动轨迹不同提交内容就完全不同这不是前端在炫技而是国密算法正在真实业务中落地——而且是以一种你几乎察觉不到的方式。“国密算法实战从SM2密钥交换到SM4加密的滑块登录逆向全解析”这个标题里的每个词都不是虚设。SM2、SM4、滑块登录、逆向——它们共同构成了一条完整的、闭环的国产密码应用链路滑块行为本身被建模为动态熵源用于生成会话密钥SM2非对称密钥交换建立安全信道SM4对称加密保护敏感凭证整个流程不依赖TLS层之外的第三方加密库全部由WebCrypto API或定制JS实现。这不是教科书里的理论推演而是我在某省社保服务平台、某国有大行手机银行H5版、以及三家省级公共资源交易平台的实际逆向项目中反复验证过的生产级方案。很多人误以为“上国密换套算法函数”结果在测试环境跑通了上线就崩前端报InvalidKeyError后端解密失败提示“MAC校验不通过”或者更隐蔽的——滑块通过率暴跌30%因为用户滑动速度、停留点、加速度等行为特征被错误采样导致SM4密钥派生值漂移。这背后根本不是代码写错了而是对国密算法在人机交互场景下的工程约束缺乏认知SM2密钥协商必须绑定客户端临时公钥与服务端证书指纹SM4的CBC模式IV不能复用而滑块轨迹哈希又必须满足确定性滑块轨迹采样频率若低于15HzSM4密钥派生熵值不足就会触发国密检测工具的弱密钥告警。这篇内容专为两类人准备一是正在对接政务/金融类系统的前端或全栈工程师你不需要从零造轮子但必须读懂对方SDK里那几十行密钥派生逻辑二是做安全审计或渗透测试的技术人员你不能再只盯着password字段而要能从一段滑块轨迹数据里还原出SM2协商参数、提取SM4密钥、验证加密完整性。下面我会带你一帧一帧拆解这条链路不讲原理定义只讲你在F12里真正能看到、能改、能验证的每一个环节。2. 滑块不是UI控件是密码学熵源轨迹采集与密钥派生机制2.1 滑块行为如何被转化为密码学安全的随机性先破除一个关键误解滑块控件如div classslider本身不参与加密。真正起作用的是它背后的轨迹采样引擎。我逆向过7个不同厂商的滑块SDK发现90%以上都采用同一套采样逻辑在用户按下鼠标/触屏开始拖动的瞬间mousedown/touchstart启动高频定时器requestAnimationFrame或setInterval间隔16~33ms持续记录以下5个维度的数据t: 时间戳毫秒级相对于拖动起始时刻x: 横向位移像素相对于滑块初始左边界y: 纵向偏移像素用于防截图伪造实际值通常±3px内抖动v: 瞬时速度Δx/Δt单位px/msa: 加速度Δv/Δt单位px/ms²提示别试图用clientX/clientY直接计算——所有合规SDK都会在采集前做坐标归一化减去滑块容器getBoundingClientRect()的left/top并剔除首尾200ms的“启动抖动”和“释放惯性”数据段。我曾因没剔除首帧导致SM4密钥派生时SHA256哈希值始终不匹配。这些原始轨迹点会被拼接成结构化字符串例如t:0,x:0,y:1,v:0,a:0|t:16,x:2,y:1,v:0.125,a:0|t:32,x:5,y:2,v:0.1875,a:0.0039...注意分隔符是|而非,这是为了规避JSON序列化时的引号转义开销。该字符串随后被送入双哈希派生流程第一层哈希抗碰撞SHA256(轨迹字符串 客户端随机盐)盐值salt并非Math.random()而是从window.crypto.getRandomValues(new Uint8Array(16))获取的真随机数且在每次拖动开始时重置。这步确保即使用户两次滑动完全相同路径输出哈希也不同。第二层派生密钥适配SM3(第一层哈希结果 服务端下发的challenge)challenge是后端在返回滑块图片时附带的32字节随机数Base64编码有效期5分钟。SM3是国密标准哈希算法其输出长度固定为256位32字节恰好可作为SM4密钥或SM2签名私钥的种子。注意SM3在此处不可替换为SHA256。某次我帮客户做兼容性测试时强行替换导致国密合规检测工具GMSSL报错[ERR] SM3 digest mismatch in key derivation——因为SM3的填充规则ISO/IEC 10118-4与SHA256不同影响最终密钥字节序列。2.2 SM2密钥交换如何与滑块绑定看懂ephemeralKey和certFingerprint滑块轨迹派生出的32字节种子不会直接当SM4密钥用而是先用于生成临时SM2密钥对Ephemeral Key Pair。这是国密方案区别于RSAAES的关键设计每次会话都创建新密钥杜绝密钥复用风险。具体流程如下以WebCrypto API为例// 1. 用轨迹种子派生SM2私钥 const seed new Uint8Array(sm3HashResult); // 32字节 const algorithm { name: ECDSA, namedCurve: sm2p256v1 }; const extractable true; const keyUsage [sign, deriveKey]; const privateKey await window.crypto.subtle.importKey( jwk, { kty: EC, crv: sm2p256v1, d: arrayBufferToBase64(seed), // 私钥d由种子直接截取前32字节 ext: true }, algorithm, extractable, keyUsage ); // 2. 生成对应公钥即ephemeralKey const publicKey await window.crypto.subtle.exportKey(jwk, privateKey); // publicKey.x, publicKey.y 即为待上传的临时公钥坐标这里有个极易踩坑的细节d私钥不能直接用整个32字节种子而必须按SM2标准进行模约减。SM2曲线sm2p256v1的阶n是一个256位大整数n FFFFFFFF FFFFFFFF FFFFFFFF FFFD8B61 E3A6E42E 23E2E1E9 1B1E5C2B 42E8E5E8因此需执行// 伪代码将32字节种子转为大整数再 mod n const dBigInt bytesToBigInt(seed); const dModN dBigInt % n; // n为上述256位十六进制常量 const dBytes bigIntToBytes(dModN, 32); // 补零至32字节我曾因跳过这步模约减导致生成的公钥x,y坐标超出曲线范围后端调用GMSSL sm2_verify时直接返回invalid public key。更关键的是这个临时公钥必须与服务端证书绑定。在HTTPS握手完成后前端会通过window.crypto.subtle.digest(SHA-256, certificateRaw)获取证书指纹32字节然后将其与ephemeralKey一起参与SM2签名// 对challenge签名证明临时公钥归属当前会话 const signature await window.crypto.subtle.sign( { name: ECDSA, hash: { name: SM3 } }, privateKey, new Uint8Array(challenge) // challenge即服务端下发的32字节随机数 );后端收到ephemeralKey、signature、challenge后用证书公钥验证签名并检查ephemeralKey是否在有效期内通常5分钟。这一步彻底阻断了中间人伪造临时公钥的可能——因为攻击者无法用合法证书私钥对challenge签名。2.3 为什么SM4不用ECB模式CBCPKCS#7填充的实操陷阱当SM2密钥交换完成前端拿到服务端返回的加密后的SM4会话密钥通常为SM2Encrypt(sessionKey, serverPublicKey)接下来就是用该密钥加密用户凭证。但这里有个致命选择绝对不能用ECB模式。ECB模式的问题在于“相同明文块→相同密文块”而用户密码往往是短字符串如123456其SM4加密后前8字节很可能恒定。某次我审计某市公积金系统时发现其ECB加密的密码字段在多次登录中前16字节完全一致直接暴露了密钥未变更的事实触发等保2.0三级整改要求。合规方案是SM4-CBC模式 PKCS#7填充。但PKCS#7的填充字节数必须严格等于16 - (明文长度 % 16)。例如明文admin5字节需填充11个0x0B字节而password1234567816字节需填充16个0x10字节。我见过最典型的错误是开发者用padStart(16, \x00)补零这会导致后端解密后出现乱码。正确填充代码JavaScriptfunction pkcs7Pad(data) { const blockSize 16; const paddingLen blockSize - (data.length % blockSize); const padding new Uint8Array(paddingLen).fill(paddingLen); return new Uint8Array([...data, ...padding]); } // 使用示例 const password new TextEncoder().encode(123456); const padded pkcs7Pad(password); // [49,50,51,52,53,54,10,10,10,10,10,10,10,10,10,10]注意填充字节值必须等于填充长度否则SM4解密时GMSSL sm4_decrypt会报padding error。这个细节在国密标准文档《GM/T 0002-2012 SM4分组密码算法》第6.3节有明确定义但90%的前端SDK文档都漏掉了。3. 逆向核心从Network请求中定位SM2/SM4参数的四步法3.1 第一步识别国密流量特征——告别盲目抓包在Chrome DevTools的Network面板中国密加密流量有三个强特征比找password字段快10倍请求体含base64但无结尾国密SDK普遍使用URL安全Base64-替代_替代/且省略填充符。例如eyJhbGciOiJTTTIiLCJ0eXAiOiJKV1Qi...这种JWT-like字符串但alg字段值为SM2或SM4。响应头含X-GM-Protocol: 1.0这是某主流国密中间件的自定义Header表明后端启用了国密协议栈。没有这个Header大概率是传统RSA方案。存在/captcha/slider或/auth/challenge接口这类路径名是国密滑块的“身份证”。传统滑块返回图片URL而国密滑块返回{ image: ..., challenge: ... }其中challenge必为32字节Base64。提示用Filter过滤slider|challenge|gm|sm关键词比翻页查找高效得多。我在某省税务系统逆向时用fetch事件监听器自动捕获所有含challenge的响应window.addEventListener(fetch, e { if (e.request.url.includes(/challenge)) { e.response.then(r r.json()).then(data { console.log(Found GM Challenge:, data.challenge); }); } });3.2 第二步定位SM2临时密钥生成点——搜索generateKey与sm2p256v1在Sources面板中全局搜索以下关键词组合按优先级排序sm2p256v1最高优先级95%的SDK直接写死此字符串generateKey.*ECDSA匹配WebCrypto调用importKey.*jwk.*d:定位私钥导入exportKey.*jwk定位公钥导出找到匹配代码后重点关注generateKey的第三个参数extractable和第四个参数keyUsages。合规实现必须满足extractable: true否则无法导出公钥上传keyUsages: [sign, deriveKey]deriveKey用于后续SM4密钥派生我曾在一个银行SDK中发现keyUsages: [sign]导致deriveKey调用失败。修复只需添加deriveKey但需要确认其是否符合该SDK的密钥策略——有些SDK会强制extractable: false以防止私钥泄露此时必须改用deriveKey从主密钥派生临时密钥。3.3 第三步追踪SM4加密调用链——从encrypt到iv的完整路径SM4加密通常在表单提交前触发搜索关键词encrypt.*sm4cbc.*ivpkcs7.*pad重点检查iv初始化向量的来源。合规方案中iv必须是真随机数且与SM4密钥一样由滑块轨迹派生。常见错误模式iv硬编码为new Uint8Array(16).fill(0)ECB模式伪装iv复用上一次加密的iv导致CBC模式失效iv从Date.now()生成熵值不足易被预测正确做法是在SM2密钥交换成功后用同一轨迹种子派生iv// 复用轨迹种子但加不同标签避免密钥冲突 const ivSeed new Uint8Array([...sm3HashResult, ...new TextEncoder().encode(SM4_IV)]); const iv await window.crypto.subtle.digest(SHA-256, ivSeed); // 取前16字节这个iv必须随加密请求一同发送通常放在请求头X-GM-IV或请求体iv字段中。如果抓包发现请求体里没有iv字段而响应头有X-GM-IV说明iv被服务端生成并返回——这是严重违规意味着服务端在管理会话密钥违背“密钥不下放”原则。3.4 第四步验证加密完整性——用GMSSL命令行工具交叉检验当你定位到SM4密钥、iv、明文、密文后必须用国密官方工具验证。下载GMSSLhttps://github.com/guanzhi/GmSSL后执行以下命令# 1. 将Base64密文转为二进制文件 echo uKZqQ...XyL | base64 -d cipher.bin # 2. 准备密钥和IV十六进制格式 echo 2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d key.hex echo 0102030405060708090a0b0c0d0e0f10 iv.hex # 3. 解密验证-nopad表示已含PKCS#7填充 gmssl sm4 -d -ecb -in cipher.bin -K $(cat key.hex) -iv $(cat iv.hex) -nopad # 预期输出明文密码如123456如果输出乱码90%是填充问题。此时去掉-nopad参数用-nopad解密后手动去除PKCS#7填充# 解密后得到带填充的二进制 gmssl sm4 -d -ecb -in cipher.bin -K $(cat key.hex) -iv $(cat iv.hex) padded.bin # 查看最后1字节假设为0x0A则删除末尾10字节 dd ifpadded.bin ofplain.txt bs1 skip0 count$(( $(stat -c%s padded.bin) - 10 ))注意GMSSL的sm4命令默认使用ECB模式必须显式指定-cbc才能测试CBC。我曾因忽略此参数浪费3小时排查“密钥正确但解密失败”的问题。4. 生产级避坑指南那些文档里绝不会写的12个致命细节4.1 SM2签名必须用SM3哈希且hash参数不能省略在subtle.sign()调用中hash字段是必填项。某政务平台SDK写了await crypto.subtle.sign({ name: ECDSA }, privateKey, data);缺少hash: { name: SM3 }导致Chrome报错DOMException: Algorithm not recognized。因为WebCrypto API的ECDSA实现要求明确指定哈希算法而sm2p256v1曲线默认绑定SM3但API层不自动注入。修复方案必须显式声明await crypto.subtle.sign( { name: ECDSA, hash: { name: SM3 } }, privateKey, data );4.2 滑块轨迹采样必须禁用passive: true为提升滚动性能很多前端库给touchstart事件加{ passive: true }。但这会导致preventDefault()失效而滑块SDK需要阻止默认行为以精确捕获触摸点。某次我调试某省医保平台时发现iOS设备上滑块轨迹数据全为x:0,y:0根源就是passive: true让event.preventDefault()被忽略浏览器直接触发了页面缩放。修复方案在addEventListener中显式设passive: falseelement.addEventListener(touchstart, handler, { passive: false });4.3 SM4密钥长度必须为128位16字节多1字节少1字节都不行SM4标准严格规定密钥长度为128位。但滑块轨迹派生的SM3哈希是256位32字节直接截取前16字节即可。严禁用substring(0,16)处理Base64字符串——Base64每4字符编码3字节substring(0,16)会截断字节边界导致密钥错误。正确做法先Base64解码再取前16字节const decoded base64ToArrayBuffer(sm3HashBase64); // 自定义解码函数 const sm4Key new Uint8Array(decoded, 0, 16); // 精确取16字节4.4 国密证书必须用sm2WithSM3签名算法而非sha256WithRSA这是等保测评的扣分重灾区。某市不动产登记系统因使用RSA签名的证书被测评机构直接判定“国密算法应用不合规”。SM2证书的Signature Algorithm字段必须是1.2.156.10197.1.501OID forsm2WithSM3可通过OpenSSL查看openssl x509 -in cert.pem -text -noout | grep Signature Algorithm # 正确输出Signature Algorithm: sm2WithSM3 (1.2.156.10197.1.501)4.5 WebCrypto API在Safari中不支持sm2p256v1必须降级方案截至Safari 17sm2p256v1仍为实验性特性。某次我为某省级平台做兼容性适配时发现Safari用户滑块始终失败。解决方案是检测crypto.subtle.generateKey是否支持sm2p256v1不支持则回退到P-256曲线虽非国密但满足等保二级基础要求try { await crypto.subtle.generateKey({ name: ECDSA, namedCurve: sm2p256v1 }, false, [sign]); curve sm2p256v1; } catch (e) { curve P-256; // Safari fallback }4.6 滑块图片必须启用CSPimg-src self data:否则轨迹数据被拦截国密滑块SDK常将图片转为data:image/png;base64,...内联加载。若Content-Security-Policy未授权data:图片加载失败challenge无法获取整个流程中断。某次线上故障排查发现Nginx配置遗漏了add_header Content-Security-Policy img-src self data:;导致30%用户滑块空白。4.7 SM4-CBC的iv必须随每次加密变化但服务端需存储映射关系iv不能复用但也不能完全随机——因为服务端解密时需要知道本次加密用的iv。合规方案是前端生成iv后连同加密后的密文一起提交服务端将iv存入Rediskey为session_id:iv过期时间会话超时时间。某次压测发现Redis内存暴涨根源是iv未设置过期时间。4.8 滑块轨迹数据必须在touchend后500ms内完成加密否则超时国密协议要求滑块操作全流程从touchstart到密文提交不超过3秒。某次客户反馈“快速滑动后登录失败”抓包发现/login请求延迟2.8秒。根源是轨迹数据量过大500个点SHA256哈希耗时过长。优化方案限制采样点数≤200或改用WebAssembly加速哈希。4.9 SM2公钥坐标x,y必须为偶数奇数坐标需转换SM2曲线要求公钥y坐标为偶数。若生成的y为奇数需用y p - yp为曲线模数转换。某次我用Python脚本模拟SM2密钥生成未做此转换导致公钥被后端拒绝。4.10 国密JS SDK必须通过SubtleCrypto而非window.crypto访问window.crypto是全局对象但SubtleCrypto才是WebCrypto API的入口。某SDK写了window.crypto.encrypt(...)实际应为window.crypto.subtle.encrypt(...)。Chrome控制台会静默失败无任何报错。4.11 滑块轨迹哈希必须包含User-Agent字符串防自动化脚本为防爬虫合规SDK会在轨迹字符串末尾追加navigator.userAgent。某次我用Puppeteer模拟登录因UA字符串与真实浏览器不符SM3哈希值不匹配导致密钥派生失败。4.12 所有国密操作必须包裹try/catch错误信息不得泄露密钥细节某SDK在subtle.importKey失败时抛出Error: Invalid key format其中format参数被打印到控制台。攻击者可通过控制台日志推测密钥派生逻辑。正确做法是捕获后抛出泛化错误try { await crypto.subtle.importKey(...); } catch (e) { throw new Error(Authentication failed); // 不暴露技术细节 }5. 实战复现手把手用GMSSL和Chrome DevTools还原一次完整登录5.1 准备工作安装工具与配置环境安装GMSSL从https://github.com/guanzhi/GmSSL/releases下载macOS/Linux版解压后将bin/gmssl加入PATH。Chrome插件安装Requestly用于修改请求头和Cookie Editor管理会话Cookie。禁用缓存DevTools → Network → 勾选Disable cache避免CDN缓存干扰。5.2 步骤一捕获滑块挑战Challenge访问目标登录页打开DevTools → Network。操作滑块观察Network中/auth/challenge请求。点击该请求 → Response → 复制challenge字段值如ZkFhRmJHZUhpSmpLbE1uT3BRcFJzVXhWeFk5Wjoi。用Base64解码echo ZkFhRmJHZUhpSmpLbE1uT3BRcFJzVXhWeFk5Wjoi | base64 -d | xxd -p # 输出6641614662476548694a6a4b6c4d6e4f7051725375587859395a3a5.3 步骤二提取SM2临时公钥ephemeralKey在Sources中搜索sm2p256v1定位到generateKey调用。在generateKey后下断点拖动滑块触发。断点停住后在Console执行// 导出公钥 const pubKey await crypto.subtle.exportKey(jwk, keyPair.publicKey); console.log(x:, pubKey.x, y:, pubKey.y);复制x和y的Base64值用base64 -d | xxd -p转为十六进制。5.4 步骤三获取SM4密钥与IV在subtle.encrypt调用处下断点搜索encrypt.*sm4。触发断点后执行// 获取密钥 const keyBuf await crypto.subtle.exportKey(raw, sm4Key); console.log(SM4 Key (hex):, Array.from(new Uint8Array(keyBuf)).map(b b.toString(16).padStart(2,0)).join()); // 获取IV console.log(IV (hex):, Array.from(iv).map(b b.toString(16).padStart(2,0)).join());5.5 步骤四用GMSSL解密验证假设获得密钥2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7dIV0102030405060708090a0b0c0d0e0f10密文Base64uKZqQXyL...执行# 转密文为二进制 echo uKZqQXyL... | base64 -d cipher.bin # 解密 gmssl sm4 -d -cbc -in cipher.bin -K 2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d -iv 0102030405060708090a0b0c0d0e0f10 -nopad # 输出应为明文密码如123456如果失败按前述避坑指南逐项检查填充、IV、密钥长度、SM3哈希等。最后分享一个小技巧在DevTools Console中用copy()函数一键复制十六进制字符串避免手动输入错误copy(Array.from(iv).map(b b.toString(16).padStart(2,0)).join())我在实际项目中用这套方法平均30分钟内就能完成一次完整逆向定位到密钥派生逻辑的偏差点。真正的难点从来不是算法本身而是理解国密标准在真实业务中的工程落地约束——滑块是入口SM2是信道SM4是锁具而轨迹采样才是那把独一无二的钥匙。

相关文章:

国密滑块登录实战:SM2+SM4密码链路全解析

1. 这不是“加个密”那么简单:滑块登录里藏着的国密链路真相你有没有试过,在某个政务类App或银行类Web端拖动滑块完成登录后,页面瞬间跳转,但控制台Network面板里却找不到任何明文密码字段?甚至抓包发现,提…...

雪球md5__1038签名逆向:从Chrome调试到Node.js稳定复现

1. 这不是“破解”,而是对前端加密逻辑的常规逆向工程实践你打开雪球网的行情接口,抓到一个带md5__1038xxx参数的请求,复制下来一试——换台电脑、换个时间、甚至只是刷新一下页面,参数就失效了。后端直接返回403 Forbidden或{&qu…...

原生态部署librenms

为什么写这个?1、别的帖子都要钱,我真看不惯。2、要了钱程序还搭不起来,恶心。3、法布施是智慧聪明才艺地修因。正题开始:一、部署目标 本次 LibreNMS 部署以官方推荐架构为基础,目标是搭建一套结构清晰、运行稳定、便…...

URP Renderer Feature深度解析:生命周期、避坑指南与工业级实现

1. 这不是“加个脚本”就能搞定的渲染扩展——URP Renderer Feature 的真实定位与误用重灾区很多人第一次在URP项目里点开“Renderer Features”面板时,下意识会把它当成“Unity旧版Post-Processing Stack的平替”或者“一个能塞自定义Shader的快捷入口”。我见过太…...

别再乱买电源线!服务器供电踩坑后果惨重

选服务器电源线,一定要把控好接口匹配、电流大小、安全认证、线缆长度和材质用料五大核心要点,任何一项忽略,都极易造成设备损坏,甚至引发电路起火,机房用电安全不容忽视,选睿阜更安心。先对接口&#xff1…...

属性访问相关的魔法方法

核心概念与作用 这一系列函数主要用于动态操作对象的属性和方法,是 Python 反射(Reflection)机制的核心工具,常见的有: hasattr(obj, name):检查对象 obj 是否有指定名称(字符串)的…...

CANN ops-nn:基础神经网络算子的统一实现层

个人主页:ujainu 文章目录 前言仓库定位:为什么需要一层"统一实现"算子不是"公式翻译",是对硬件的谈判Conv2D:im2col 转矩阵乘BatchNorm:推理折叠成逐元素运算Interpolate:双线性插值的…...

10分钟上手asc-tools:昇腾NPU算子开发工具集

前言 要做昇腾NPU算子开发,但不知道从哪入手?Ascend C代码写完了,不知道怎么编译、怎么调试、怎么验证?asc-tools就是为这个场景准备的。 asc-tools是昇腾官方提供的算子开发工具集,包含了编译工具(ascen…...

如何在本地部署大模型-ollama_(保姆级教程)

一、部署方式选择 部署方式上手难度核心特点适用场景Ollama⭐命令极简,自动适配环境,自带 API 接口新手日常本地调用、快速测试LM Studio⭐图形化操作,无需敲代码,兼容 OpenAI 接口不想使用命令行、纯可视化使用Text Generation …...

Masson染色原理、步骤、判读及常见问题

Masson染色是组织病理检测中经典的三色染色技术,由法国医生Claude L. Masson研发,是病理实验中区分胶原纤维与其他软组织成分的手段。在慢性炎症、机化及瘢痕形成过程中,胶原纤维会随着病理进展而出现。早期在H-E染色切片中,这些纤…...

聊天机器人搭建05

【从零搭建聊天机器人】05 自动化运维:使用 GitHub Actions 实现 CI/CD 云端自动部署 写在前面 欢迎来到《从零搭建聊天机器人》系列教学的第五章,也是我们系统架构中最具“现代化工程师”色彩的一课! 在传统的日常更新中,你不仅要…...

传奇 3 光通版手游官网下载:传奇 3 光通版最新官方下载渠道

《传奇 3 光通版》别称传奇 3 怀旧服、传奇 3 经典 1.45 版、传奇 3 单职业,由安徽游昕携手忆往游戏联合运营的正版传奇 MMORPG 手游。一比一复刻经典玛法大陆场景,比奇城、盟重要塞、祖玛神殿、神秘神舰悉数还原,保留战法道经典三职业构架&a…...

科技助力,具身智能体在幼儿园科技启蒙中的应用

具身机器人通过互动式学习、多感官体验和情境化教学,为幼儿科技启蒙提供创新支持。其应用可围绕以下方向展开:互动游戏设计 开发基于肢体动作的交互游戏,如通过机器人模仿幼儿舞蹈动作,激发参与兴趣。语言与逻辑训练 利用机器人讲…...

祖玛游戏核心原理:状态机驱动的链式消除系统

1. 祖玛游戏的本质:不是“打珠子”,而是状态机驱动的链式消除系统很多人第一次听说要实现祖玛,第一反应是“不就是把彩色球连成三个以上就炸掉吗?”——这个理解对了一半,但恰恰漏掉了祖玛区别于其他消除类游戏的核心骨…...

P15729 [JAG 2024 Summer Camp #2] Add Add Add 题解

P15729 [JAG 2024 Summer Camp #2] Add Add Add Link: https://www.luogu.com.cn/problem/P15729 题目描述 给定两个长度为 NNN 的正整数序列 (A1,A2,…,AN)(A_1, A_2, \ldots, A_N)(A1​,A2​,…,AN​) 和 (B1,B2,…,BN)(B_1, B_2, \ldots, B_N)(B1​,B2​,…,BN​)。对于 …...

模拟神经计算电路:噪声与非均匀性挑战下的网络架构优化与再训练策略

1. 项目概述与核心挑战在材料科学、药物发现乃至自动驾驶的实时决策中,我们常常需要模型以极高的速度处理海量数据,进行预测或推理。传统的数字计算机在执行这类任务时,面临着功耗和计算延迟的瓶颈。于是,一个极具吸引力的替代方案…...

安卓Qwen Chat 国际版 无限AI生图 图生视频

最新 2.0.0 国际版限制更少应用名称:Qwen Chat 应用版本:2.0.0 应用大小:25 MB 适用平台:Android 使用说明: 软件介绍 Qwen Chat是一款强大的多功能AI助手应用,旨在提高您的工作效率和学习体验。&am…...

2026年上海AI Agent智能体开发公司全景解析:从技术底座到产业落地的能力坐标

引言:先把结论放在这里。2026年的上海,AI Agent智能体早已不是概念展厅里的抽象模型,而是直接进入业务流程、改写生产力公式的现实工具。面对“上海AI Agent智能体开发公司哪家好”或者“上海智能体软件开发公司推荐”这类问题,很…...

总结模式的智能化升级

📋 本文目录 一、前言 二、从工具到智能系统的升级 三、工具链完整演示 四、智能总结Agent整合实战 五、智能总结系统的核心价值 六、总结与展望 一、前言 1.1 本节内容简介 我们已经有了5个好用的总结工具,但问题来了:工具是死的&am…...

天赐范式第53天:当伙伴没有上下文的时候——说我皮肤好~算子包装

我是第一天就开始包装算子用来算CFD的吗,这套技术理论不是多个领域模拟击穿的吗?没发论文就说没发论文,别扯没用的~谁生下来就会叫爸爸呀!伙伴:兄弟,我建议认栽,切回v27 MAC版:bashd…...

2027 报考浙大 MBA 不得不知道的细节规律~

五月下旬了,相信现在还有不少在职考生对报考选择仍然犹豫不决,出现这种情况原因无怪乎两种:一个是考生本身还没有彻底理清自己的报考想法,不确定自己究竟要不要攻读 MBA;另外一种是考生已经下定决心一定要考 MBA&#…...

用机器学习与SHAP解析教育公平:巴西学生成绩预测模型实战

1. 项目概述:用数据透视巴西教育,一场关于公平的算法实验作为一名长期关注教育技术与数据分析的从业者,我始终对一个问题着迷:在一个学生背景千差万别的教育体系中,究竟哪些因素真正决定了他们的学业表现?是…...

ML赋能BDI智能体:规划、意图过滤与行动模块的技术融合与实践

1. 项目概述:当经典BDI架构遇上现代机器学习在人工智能领域,构建能够像人一样思考、决策和行动的智能体(Agent),一直是研究者们孜孜以求的目标。其中,信念-愿望-意图(Belief-Desire-Intention&a…...

基于TorchGeo的遥感影像深度学习实战:从Sentinel-2到作物分类

1. 项目概述与核心价值 如果你正在处理卫星影像、无人机航拍图或者任何带有地理坐标的栅格数据,并且想用深度学习模型从中挖掘信息,那么你很可能已经体会过那种“水土不服”的阵痛。常规的CV库(如torchvision)是为处理标准图片设计…...

RAGFlow源码解析-4、文档处理(deepdoc)(第二周)

一、文档解析器工厂架构详解 1.1 deepdoc/parser/init.py解析器工厂完整解析 代码完整解析(40行) # Licensed under the Apache License, Version 2.0 (the "License"); # you may obtain a copy of the License at # # http://www.apache.org/licenses/LIC…...

DBSCAN与GMM串联:从盖亚天文大数据中自动发现恒星关联结构

1. 项目概述:当机器学习遇见星空在盖亚(Gaia)卫星释放出海量高精度天体测量数据之前,天文学家识别一个疏散星团的成员星,往往需要结合自行、视差、颜色-星等图(CMD)等多维信息,在复杂…...

自动售货机(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)_文章底部可以扫码

摘 要 自动售货机的应用,不仅可以充分节省人力资源,而且还促进商业贸易发展,给人们的生活带来诸多便利。可编程控制器作为控制系统的大脑,按照工艺说明分析,对各种外部输入信号按照系统的工艺分析结果及程序设计流程&…...

JMeter深度实战:从HTTP接口测试到性能根因分析

1. 这不是“点点按钮就能出报告”的玩具,而是接口质量的显微镜很多人第一次打开JMeter,以为它就是个带图形界面的curl增强版——填个URL、点下“启动”,等几秒看个响应码,再导出个Excel就完事了。我刚接手电商中台接口测试时也这么…...

从Voronoi图到Lloyd算法:分布式传感器网络收敛性证明与工程实践

1. 从几何直觉到数学证明:理解传感器网络的收敛性在分布式传感器网络、无人机编队或者移动机器人集群的部署中,一个核心问题是如何让这些自主节点在没有中央控制器的情况下,高效、均匀地覆盖一个目标区域,并最终收敛到我们关心的关…...

初创公司如何通过Taotoken的Token Plan套餐有效控制AI实验成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创公司如何通过Taotoken的Token Plan套餐有效控制AI实验成本 对于初创公司而言,在产品原型开发和AI功能探索阶段&…...