最强解析面试题:字符串全排列


在这里插入图片描述

最强解析面试题:字符串全排列「建议收藏!」

文章讲解 “ 字符串全排列 ” 经典面试题,包含思路及源码,及解惑!

题目

输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。

例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。

示例1

输入:
“ab”
返回值:
[“ab”,“ba”]
说明:
返回[“ba”,“ab”]也是正确的

思路

1、通过递归处理,从首字母开始依次替换后续字母的位置,可得到全部字符排列
2、存在重复字母时,排列中会存在重复,故去重

### 3DES 加密模式及其对应密钥长度 三重数据加密标准(Triple Data Encryption Standard, 3DES)是一种对称密钥算法,它通过三次应用原始 DES 密码来增强安全性。以下是几种常见的 3DES 模式以及每种模式下的密钥长度: #### ECB 模式 电子密码本(Electronic Codebook Book, ECB)是最简单的分组密码操作模式,在这种模式下,每个明文块独立地被相同的密钥加密成相应的密文块。 - **密钥长度**: 可以为 168 位(三个不同的 56 位子密钥),或者更常见的是 112 位(两个 56 位子密钥重复使用第三个相同的位置)。由于有效密钥空间减半的影响,实际安全强度接近于 112 或者 112/2=56 位[^1]。 ```python from Crypto.Cipher import DES3 key = b'your_16_or_24_bytes_key' cipher = DES3.new(key, DES3.MODE_ECB) ``` #### CBC 模式 密码分组链接(Cipher Block Chaining, CBC)模式中,每个明文块先与前一个密文块异或后再进行加密;对于第一个块,则会有一个初始向量(IV)参与运算。 - **密钥长度**: 同样支持 168 位和 112 位两种情况。 ```python iv = b'an_initialization_vector' cipher = DES3.new(key, DES3.MODE_CBC, iv) ``` #### CFB 模式 密码反馈(Cipher Feedback, CFB)模式可以将分组密码转换为流密码工作方式,允许逐字节处理数据而不必等待整个分组完成。 - **密钥长度**: 支持 168 位和 112 位。 ```python cipher = DES3.new(key, DES3.MODE_CFB, iv) ``` #### OFB 模式 输出反馈(Output Feedback, OFB)模式也是一种能够实现流加密的方式,其中每次只加密 IV 而不是消息本身,并利用上一次的结果作为下次输入的一部分。 - **密钥长度**: 支持 168 位和 112 位。 ```python cipher = DES3.new(key, DES3.MODE_OFB, iv) ``` #### CTR 模式 计数器(Counter, CTR)模式提供了一种并行化友好的方法来进行加解密操作,因为它不需要依赖前面的数据就可以计算任意位置上的密文片段。 - **密钥长度**: 支持 168 位和 112 位。 ```python nonce = b'a_nonce_value_for_ctr_mode' counter = Counter.new(64, prefix=nonce) cipher = DES3.new(key, DES3.MODE_CTR, counter=counter) ``` 需要注意的是,尽管 3DES 提供了多种不同长度的密钥选项,但由于其基于较旧的标准构建,因此建议在新项目中考虑采用更新更强的安全协议如 AES 来替代 3DES 的使用[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魏小言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值