2.算法基础-字符移位

本文详细解析了一种字符移位算法的实现,通过C++代码示例展示了如何将字符串中的大写字母移动到字符串的末尾,同时保持原有顺序不变。此算法适用于字符串操作和字符分类任务。

1.题目链接:算法基础-字符移位

2.Code

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3+5;

int main()
{   
    char str[maxn];
    while(cin>>str){
        int len = strlen(str);
        int more = len-1;
        for(int i = 0; i <= more;)
        {
            if(str[i] >= 'A'  && str[i] <= 'Z')
            {
                char tmp = str[i];
                for(int j = i; j < len; ++j){
                    str[j] = str[j+1];
                }
                str[len-1] = tmp;
                more--; 
            }
            else{
                ++i;
            } 
        }
        cout<<str<<endl;
    }
    return 0;
}


/*
AkleBiCeilD
*/
内容概要:本文档介绍了基于3D FDTD(时域有限差分)方法在MATLAB平台上对微带线馈电的矩形天线进行仿真分析的技术方案,重点在于模拟超MATLAB基于3D FDTD的微带线馈矩形天线分析[用于模拟超宽带脉冲通过线馈矩形天线的传播,以计算微带结构的回波损耗参数]宽带脉冲信号通过天线结构的传播过程,并计算微带结构的回波损耗参数(S11),以评估天线的匹配性能和辐射特性。该方法通过建立三维电磁场模型,精确求解麦克斯韦方程组,适用于高频电磁仿真,能够有效分析天线在宽频带内的响应特性。文档还提及该资源属于一个涵盖多个科研方向的综合性MATLAB仿真资源包,涉及通信、信号处理、电力系统、机器学习等多个领域。; 适合人群:具备电磁场与微波技术基础知识,熟悉MATLAB编程及数值仿真的高校研究生、科研人员及通信工程领域技术人员。; 使用场景及目标:① 掌握3D FDTD方法在天线仿真中的具体实现流程;② 分析微带天线的回波损耗特性,优化天线设计参数以提升宽带匹配性能;③ 学习复杂电磁问题的数值建模与仿真技巧,拓展在射频与无线通信领域的研究能力。; 阅读建议:建议读者结合电磁理论基础,仔细理解FDTD算法的离散化过程和边界条件设置,运行并调试提供的MATLAB代码,通过调整天线几何尺寸和材料参数观察回波损耗曲线的变化,从而深入掌握仿真原理与工程应用方法。
任务描述 本关任务:生成对称密码DES算法的16轮子密钥。 相关知识 为了完成本关任务,您需要掌握: 16轮子密钥的生成方法; 基于pyton脚本的DES命令使用方法。 DES16轮密钥的生成方法 密钥的生成,是由64位初始密钥首先经过一个PC1置换,得到56位的密钥;然后在16轮中每一轮做移位和PC2压缩置换,每一轮得到48位的密钥。 基于pyton脚本的DES命令 DES命令说明: python DES.py -h获得帮助: 命令格式: DES.py [-h] -m M [-k K] [-i I] -o O 该命令可实现对称加密DES算法对单个分组的加解密、密钥扩展、初始置换、初始置换的逆置换、单轮变换等。 基于pyton脚本的DES命令的选项说明 DES.py [-h] -m M [-k K] [-i I] -o O 基于pyton脚本的DES命令举例 1.单个分组的初始置换 # python3 DES.py -m IP -i '1234567890abcdef' -o out.txt 2.单个分组初始置换的逆置换 # python3 DES.py -m IP -i '1234567890abcdef' -o out.txt 3.密钥扩展 # python3 DES.py -m key_expansion -k '1234567890abcdef' -o out.txt 4.单个分组单轮变换 # python3 DES.py -m round -k '123456123456' -i '1234567890abcdef' -o out.txt 5.单个分组加密 # python3 DES.py -m encrypt -k '1234567890abcdef' -i '1234567890abcdef' -o out.txt 6.单个分组解密 # pytho3 DES.py -m decrypt -k '1234567890abcdef' -i '1234567890abcdef' -o out.txt 步骤要求 实验的工作目录是/data/workspace/myshixun。 生成16轮子密钥 已知DES算法的初始密钥为0x1234567890abcdef,请用python命令行工具DES.py用密钥扩展模式生成16轮子密钥,结果写入密钥文件out1.txt。 测试说明 平台会对你的操作进行测试。 开始你的任务吧,祝你成功!
03-28
<think>嗯,用户想用Python生成DES算法的16轮子密钥,并且通过命令行工具DES.py来执行,保存结果到out1.txt,初始密钥是0x1234567890abcdef。首先,我需要回忆DES的密钥生成过程。DES的密钥是64位,但实际使用56位,分成左右各28位,每轮左移不同的位数,然后通过置换选择2得到子密钥。 用户可能需要一个Python脚本,能够处理初始密钥,执行循环左移和置换,生成16轮子密钥。然后,如何通过命令行传递参数呢?可能需要用argparse库来处理命令行输入,比如指定模式为密钥扩展,初始密钥,输出文件等。 另外,初始密钥是十六进制的0x1234567890abcdef,需要先转换成二进制字符串,去掉奇偶校验位,得到56位的密钥。然后分成C0和D0两部分,每部分28位。每一轮根据轮数左移1或2位,然后合并后通过PC-2置换生成48位的子密钥。 需要注意Python中处理位操作的方法,比如使用位掩码和移位操作。还有,置换表需要正确实现,比如PC-1和PC-2的表格。可能需要先定义这些置换表,然后按顺序应用。 然后,生成的每个子密钥需要保存到out1.txt文件中,每行一个?或者用某种格式。用户可能希望输出是十六进制的,方便查看。 现在,用户提供的引用中有提到DES密钥信息保存到keys.txt,可能可以参考输出格式。但用户这里要求的是out1.txt,所以需要将16轮子密钥按顺序写入该文件。 需要检查代码是否正确处理了初始密钥,正确应用了循环左移,以及置换是否正确。此外,确保Python脚本可以通过命令行参数接收初始密钥和输出文件,比如使用sys.argv或者argparse。 可能的步骤是:解析命令行参数,转换初始密钥为二进制,应用PC-1置换,分成C0和D0,然后循环16轮,每轮左移,合并后应用PC-2生成子密钥,保存到文件。 测试时,可以用示例初始密钥,验证生成的子密钥是否正确。比如,第一轮子密钥是否正确,或者参考已知的DES密钥扩展例子。 最后,确保代码能够通过命令行运行,比如python DES.py --mode key_schedule --key 0x1234567890abcdef --output out1.txt,或者类似的参数格式。可能需要使用argparse来定义这些选项。 总结,代码结构大致分为:参数解析,密钥处理(十六进制转二进制,PC-1置换),生成16轮子密钥(循环左移,PC-2置换),输出到文件。需要处理位数转换,位移操作,以及正确的置换表应用。</think>根据需求,实现DES密钥扩展的Python脚本需要遵循以下步骤: ### 解决方案 1. **密钥预处理** - 将16进制密钥转换为64位二进制 - 使用PC-1置换表压缩为56位有效密钥 - 分为左右各28位的C0和D0 2. **密钥循环移位** - 定义左移位数表:`[1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1]` - 执行16轮循环左移操作 3. **子密钥生成** - 每轮合并左右两部分 - 使用PC-2置换表压缩为48位子密钥 ```python # DES.py import sys import argparse # DES置换表 PC1 = [ 57,49,41,33,25,17,9,1, 58,50,42,34,26,18,10,2, 59,51,43,35,27,19,11,3, 60,52,44,36,63,55,47,39, 31,23,15,7,62,54,46,38, 30,22,14,6,61,53,45,37, 29,21,13,5,28,20,12,4 ] PC2 = [ 14,17,11,24,1,5,3,28, 15,6,21,10,23,19,12,4, 26,8,16,7,27,20,13,2, 41,52,31,37,47,55,30,40, 51,45,33,48,44,49,39,56, 34,53,46,42,50,36,29,32 ] SHIFT = [1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1] def hex_to_bin(hex_str): return bin(int(hex_str, 16))[2:].zfill(64) def permute(bits, table, n): return ''.join([bits[i-1] for i in table])[:n] def left_shift(bits, n): return bits[n:] + bits[:n] def generate_subkeys(key_hex): key_bin = hex_to_bin(key_hex) key_pc1 = permute(key_bin, PC1, 56) c = key_pc1[:28] d = key_pc1[28:] subkeys = [] for i in range(16): c = left_shift(c, SHIFT[i]) d = left_shift(d, SHIFT[i]) combined = c + d subkey = permute(combined, PC2, 48) subkeys.append(subkey) return subkeys def main(): parser = argparse.ArgumentParser() parser.add_argument('--mode', choices=['key_schedule'], required=True) parser.add_argument('--key', type=str, required=True) parser.add_argument('--output', type=str, required=True) args = parser.parse_args() if args.mode == 'key_schedule': subkeys = generate_subkeys(args.key.lower().replace('0x','')) with open(args.output, 'w') as f: for i, sk in enumerate(subkeys, 1): hex_key = hex(int(sk, 2))[2:].zfill(12) f.write(f"Round {i:2}: {hex_key}\n") if __name__ == "__main__": main() ``` ### 执行命令 ```bash python DES.py --mode key_schedule --key 0x1234567890abcdef --output out1.txt ``` ### 实现说明 1. 密钥处理时自动去除奇偶校验位[^1] 2. 每轮移位量符合DES标准规范[^2] 3. 输出格式为每行包含轮次和十六进制子密钥
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值