BugkuCTF-Crypto题缝合加密

博客讲述了在BugkuCTF中遇到的一道Crypto题目,涉及了缝合加密技术,包括猪圈密码和维吉尼亚密码的结合使用。通过分析提示,确定了维吉尼亚密码的秘钥,并利用栅栏密码(栏数通过题目线索推断为16)解密得到初步结果。进一步使用AES解密,借助base64和特定的解密工具,最终得到了flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载文件,打开
在这里插入图片描述
fence:栅栏

看组成规律,很明显和键盘有关系,但是第一租的qwedc既不能组成一个字母或数字,也没有围住一个字母或者数字,但是结合前面提到的pig,推测这里是猪圈密码
第一组的qwedc对应的是
在这里插入图片描述
以此类推,最后解出一堆怪怪的字符

在这里插入图片描述
拿去百度,发现这里提示的是维吉尼亚密码,猜想这一串字符就是对应的秘钥
giovanbattistabellaso
但是直接解密是不对的,这里还要考虑前面的那些话。注意到前面提到了num(e),这里对应的值应该是5,前面还提到了fence,应该要对原密文进行栅栏解密,重点就是栏数是多少。
其实完全可以爆破,但是还是考虑一下出题人的感受,注意到当pig的数量为1时,栏数为8,数量为2时,栏数为10,现在的数量是5,对应栏数是16

在这里插入图片描述
先对密文进行一次栏数为16的栅栏密码解密,接着维吉尼亚密码解密
在这里插入图片描述
得到的结果base64解码一次得到:
Aes is

<think>我们正在讨论的是在jQuery环境中使用sm-crypto库实现SM3加密。sm-crypto是一个JavaScript库,提供了国密算法(包括SM2、SM3、SM4)的实现。由于jQuery本身是一个JavaScript库,因此我们可以直接在jQuery项目中使用sm-crypto。 步骤: 1. 引入sm-crypto库:在HTML文件中通过script标签引入sm-crypto。 2. 编写jQuery代码:在DOM加载完成后,绑定事件(如点击按钮)来触发加密操作。 注意:sm-crypto库中关于SM3的使用,我们可以查看其文档。通常,SM3的使用方式如下: var sm3 = require('sm-crypto').sm3; var hash = sm3('abc'); // 对字符串'abc'进行SM3哈希 但是,由于我们是在浏览器环境中使用,并且通过script标签直接引入,我们可以通过全局对象`smCrypto`来访问。 示例代码: 假设我们有一个输入框和一个按钮,用户输入文本,点击按钮后计算SM3哈希并显示。 首先,在HTML中: ```html <!DOCTYPE html> <html> <head> <title>SM3加密示例</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <!-- 引入sm-crypto--> <script src="https://cdn.jsdelivr.net/npm/sm-crypto@0.0.5/dist/sm-crypto.min.js"></script> </head> <body> <input type="text" id="inputText" placeholder="输入要加密的文本"> <button id="encryptBtn">进行SM3加密</button> <div id="result"></div> <script> $(document).ready(function() { $('#encryptBtn').click(function() { var input = $('#inputText').val(); if (input) { // 使用smCrypto.sm3进行哈希 var hash = smCrypto.sm3(input); $('#result').text('SM3哈希值: ' + hash); } else { alert('请输入文本'); } }); }); </script> </body> </html> ``` 说明: - 我们引入了jQuery和sm-crypto的CDN链接。 - 当页面加载完成后,给按钮绑定点击事件。 - 获取输入框的值,如果非空,则调用`smCrypto.sm3(input)`计算哈希值,并将结果显示在页面上。 注意:sm-crypto的SM3函数返回的是16进制的哈希字符串。 另外,如果需要对非字符串数据(比如数组)进行哈希,可以传入ArrayBuffer,或者使用第二种调用方式: `smCrypto.sm3(array, { output: 'hex' })`,其中array可以是ArrayBuffer。 但通常我们处理字符串,所以直接传入字符串即可。 这样,我们就实现了在jQuery中使用sm-crypto进行SM3加密(实际上是哈希)的功能。 生成相关问: 1. SM3加密算法和MD5、SHA-1有什么区别? 2. 除了SM3,sm-crypto库还支持哪些国密算法? 3. 在浏览器环境中使用国密算法有哪些安全注意事项? 4. 如何验证SM3哈希值的正确性?</think>### 在 jQuery 中使用 sm-crypto 实现 SM3 加密 以下是使用 `sm-crypto` 库在 jQuery 中实现 SM3 加密的完整示例: #### 1. 引入必要的库 ```html <!-- 引入 jQuery --> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <!-- 引入 sm-crypto --> <script src="https://cdn.jsdelivr.net/npm/sm-crypto@0.0.5/dist/sm-crypto.min.js"></script> ``` #### 2. HTML 结构 ```html <input type="text" id="inputData" placeholder="输入要加密的文本"> <button id="encryptBtn">执行SM3加密</button> <div id="resultContainer"></div> ``` #### 3. jQuery 实现代码 ```javascript $(document).ready(function() { $('#encryptBtn').click(function() { // 获取输入文本 const inputText = $('#inputData').val().trim(); if (!inputText) { alert("请输入要加密的内容"); return; } try { // 执行SM3加密 const hashResult = smCrypto.sm3(inputText); // 显示结果 $('#resultContainer').html(` <p>原始文本: ${inputText}</p> <p>SM3哈希值: ${hashResult}</p> <p>长度: ${hashResult.length} 字符 (${hashResult.length * 4} 位)</p> `); } catch (error) { console.error("加密失败:", error); alert("加密过程中发生错误"); } }); }); ``` #### 完整示例说明 1. **SM3算法特点**: - SM3 是国密标准哈希算法,输出固定为 **256位(64位十六进制字符串)** - 不可逆加密,常用于数据完整性验证 - 满足密码学安全要求:抗碰撞性、单向性等[^1] 2. **代码解析**: ```javascript smCrypto.sm3(inputText) // 核心加密方法 ``` - 输入:任意长度字符串 - 输出:64位十六进制哈希值(如 `66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0`) 3. **使用场景**: - 用户密码存储 - 文件完整性校验 - 数字签名 - 与SM2/SM4组成国密算法体系[^2] #### 注意事项 1. 浏览器安全限制: ```javascript // 处理跨域问(如本地文件) $.ajaxSetup({ scriptAttrs: { crossOrigin: 'anonymous' } }); ``` 2. 性能优化: - 大数据建议分块处理 - 使用 Web Worker 避免界面阻塞 3. 算法验证: ```javascript // 测试向量验证 console.assert( smCrypto.sm3("abc") === "66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0", "SM3实现验证失败" ); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值