,编写一个程序,密钥是从100至200中的一个素数,加密方法是每三个字母加上密钥中对应的数字,超出26个大写和小写的字母范围的减去26,空格和标点符号不加密。例如,假设密钥为139,要加密的字符串为“We are students”,第一个字母“W”加密为’W’+1=’X’,第二个字母加密后为’e’+3=’h’,第三个字母加密后为’a’+9=’j’,第四个字母加密后为’r’+1=’s’, 第五个字母加密后为’e’+3=’h’,第六个字母加密后’s’+9超过了字母范围,所以减去26得,’s’+9-26=’b’,….。 读入已加密的文件,进行破译,将可能的密钥和相应的解密结果输出到另一个文件。 (2).编程要点: 1)用fgets函数读入字符串 2)编一个函数处理所有可能的密钥,即计算从100到200的所有素数 3)将密钥化成三个元素的整型数组,分别对应百位、十位和个位 4)将所有英文字符按序轮换减去对应的数组元素,原来是大(小)写英文字符超出大(小)写英文字符范围加上26。 (3).密码文件内容 Jk fpz nfy aij jpwyfha bszxjy, ztb bwl bs lyhlmqloy zuzkfsa.
时间: 2023-11-12 07:05:00 浏览: 97
好的,让我来编写这个程序。首先,我需要编写一个函数来计算从100到200的素数,代码如下:
```python
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def get_primes():
primes = []
for i in range(100, 201):
if is_prime(i):
primes.append(i)
return primes
```
接下来,我需要编写一个函数来解密文件,代码如下:
```python
def decrypt_file(input_file, output_file):
primes = get_primes()
with open(input_file, 'r') as f:
encrypted_text = f.read()
with open(output_file, 'w') as f:
for prime in primes:
key = [int(str(prime)[i]) for i in range(3)]
decrypted_text = ''
for i in range(len(encrypted_text)):
if encrypted_text[i].isalpha():
shift = key[i % 3]
if encrypted_text[i].islower():
decrypted_char = chr((ord(encrypted_text[i]) - 97 - shift) % 26 + 97)
else:
decrypted_char = chr((ord(encrypted_text[i]) - 65 - shift) % 26 + 65)
else:
decrypted_char = encrypted_text[i]
decrypted_text += decrypted_char
f.write(f'Key: {prime}, Decrypted text: {decrypted_text}\n')
```
最后,我调用 `decrypt_file` 函数对密码文件进行解密,代码如下:
```python
decrypt_file('encrypted.txt', 'decrypted.txt')
```
程序会输出所有可能的密钥和相应的解密结果到 `decrypted.txt` 文件中。
阅读全文