实验吧变异凯撒WP

题目地址:

http://www.shiyanbar.com/ctf/2038

第一次写WP,希望大佬们勿喷。

题目给了一段字符串afZ_r9VYfScOeO_UL^RWUc,并提示是凯撒加密。这时用CTFCrack解码试试。

并没有发现什么比较像flag的格式。说明不是普通的凯撒加密,而题目也正好说明了这一点。这时我们看一下前四位的ASCII码,afZ_对应的ASCII码为97、102、90、95,题目中给出flag的格式为flag{},而flag对应的ASCII码为102、108、97、103,这时可以看出加密方式是第一个字符的ASCII码减5,第二位的ASCII码减6,第三个减7,依次类推。这时写出解密代码。解出来的就是flag了。(本人比较菜,不太会用其他的语言,就先用c++写了)


### 变异凯撒加密算法的实现与原理 变异凯撒加密算法是对传统凯撒密码的一种扩展,其核心仍然是基于字符的偏移操作,但在具体实现上更加灵活多样。以下是关于该算法的具体介绍: #### 1. **变异凯撒加密的核心概念** 传统的凯撒密码仅针对英文字母进行固定位数的偏移,而变异版本则可以支持更多类型的字符(如数字、特殊符号等),并允许动态调整偏移量。这意味着不仅字母会被加密,其他字符也可能参与其中[^3]。 #### 2. **加密过程** 在变异凯撒加密中,输入字符串中的每个字符会根据预定义规则或动态计算得出的偏移量来进行映射。例如: - 如果遇到的是字母,则按 ASCII 表顺序移动指定数量的位置; - 若是非字母字符(如数字或符号),也可以设定特定规则对其进行处理。 下面是一个具体的例子说明如何构建这样的函数[^5]: ```javascript function variantCaesarEncrypt(text, shiftsArray) { let result = ""; for(let i=0;i<text.length;i++){ const c = text[i]; if(c >= 'a' && c <= 'z'){ // 小写字母处理逻辑 let code = ((c.charCodeAt(0)-97 + shiftsArray[i%(shiftsArray.length)])%26)+97; result += String.fromCharCode(code); }else if(c>='A'&&c<='Z'){ // 大写字母处理逻辑 let code=((c.charCodeAt(0)-65+shiftsArray[i%(shiftsArray.length)])%26)+65; result+=String.fromCharCode(code); }else{ // 非字母字符保持不变或者自定义转换规则 result+=c; } } return result; } ``` 上述代码片段展示了如何根据不同位置设置不同的偏移值(shiftsArray),使得整个加密流程更具灵活性和复杂度[^1]。 #### 3. **解密过程** 为了还原原始消息,我们需要执行相反的操作——即减去相应的偏移量。需要注意的是,在某些情况下可能还需要考虑边界条件以及循环特性等问题[^4]。 ```javascript function variantCaesarDecrypt(ciphertext, shiftsArray){ let plaintext=""; for(var j=0;j<ciphertext.length;j++){ var ch=ciphertext[j]; if(ch>="a"&&ch<="z"){ var idx=(ch.charCodeAt()-97-shiftsArray[j%(shiftsArray.length)]+26)%26; plaintext+=String.fromCharCode(idx+97); } else if (ch>="A" && ch<="Z") { var idx=(ch.charCodeAt()-65-shiftsArray[j%(shiftsArray.length)]+26)%26; plaintext+=String.fromCharCode(idx+65); } else { plaintext+=ch; } } return plaintext; } ``` 这里提供了另一种视角下的解密方法,确保能够正确恢复初始数据结构的同时也体现了对各种情况的良好兼容性[^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值