首页 > 试题广场 >

字符串加解密

[编程题]字符串加解密
  • 热度指数:278891 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}规定这样一种密码的加密方法:
\hspace{23pt}\bullet\,对于密码中的英文字母,按照字母表顺序,向后移动一位,同时改变大小写,即 \mathtt{Z} 转换为 \mathtt{a}\mathtt{A} 转换为 \mathtt{b}\mathtt{B} 转换为 \mathtt{c}\cdots\mathtt{Y} 转换为 \mathtt{z}\mathtt{Z} 转换为 \mathtt{a}
\hspace{23pt}\bullet\,对于密码中的数字,增加 19 转换为 0
\hspace{15pt}字符串的解密方法即为加密方法的逆过程。

\hspace{15pt}现在,对于给定的明文字符串 s ,将其加密;对于给定的密文字符串 t ,将其解密。

输入描述:
\hspace{15pt}第一行输入一个长度为 1 \leqq {\rm length}(s) \leqq 10^3 的字符串 s ,代表给定的明文字符串;
\hspace{15pt}第二行输入一个长度为 1 \leqq {\rm length}(t) \leqq 10^3 的字符串 t ,代表给定的密文字符串。

\hspace{15pt}除此之外,保证字符串 st 中仅包含英文字母和数字。


输出描述:
\hspace{15pt}第一行输出一个字符串,代表加密后的 s
\hspace{15pt}第二行输出一个字符串,代表解密后的 t
示例1

输入

abcdefg1
0BCDEFGH

输出

BCDEFGH2
9abcdefg
一切为了优雅

什么?这些要手打?
小琴告诉你,不用,这样就好。


发表于 2025-01-17 02:09:53 回复(0)
# 接受包含加密前和加密后密码的input
raw_input = input().split()

# 拆分出加密前密码 和 加密后密码
original_password = raw_input[0]
decrypted_password = raw_input[1]

# 加密
def encrypter(password):
    encrypted_result = []
    for char in password:
        if char.isalpha():
            # 检查大小写,然后反转大小写并且加1
            if char.islower():
                encrypted_result.append(chr(((ord(char) - ord('a') + 1) % 26) + ord('A')))
            else:
                encrypted_result.append(chr(((ord(char) - ord('A') + 1) % 26) + ord('a')))
        elif char.isdigit():
            # 数字 + 1
            encrypted_result.append(str((int(char) + 1) % 10))
        else:
            # 保留其他字符
            encrypted_result.append(char)
    return ''.join(encrypted_result)

# 解密
def decrypter(password):
    decrypted_result = []
    for char in password:
        if char.isalpha():
            # 检查大小写,然后反转大小写并且加1
            if char.islower():
                decrypted_result.append(chr(((ord(char) - ord('a') - 1) % 26) + ord('A')))
            else:
                decrypted_result.append(chr(((ord(char) - ord('A') - 1) % 26) + ord('a')))
        elif char.isdigit():
            # 数字 + 1
            decrypted_result.append(str((int(char) - 1) % 10))
        else:
            # 保留其他字符
            decrypted_result.append(char)
    return ''.join(decrypted_result)

# print最终结果
print(encrypter(original_password))
print(decrypter(decrypted_password))


发表于 2024-11-08 21:53:30 回复(1)
alpha_upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
alpha_lower = alpha_upper.lower()
number = "0123456789"
jiami_origin = input()
jiemi_origin = input()

jiami = ""
jiemi = ""
for i in range(len(jiami_origin)):
    if jiami_origin[i].isupper():
        index = alpha_upper.index(jiami_origin[i])
        jiami += alpha_lower[0 if index == 25 else index + 1]
    if jiami_origin[i].islower():
        index = alpha_lower.index(jiami_origin[i])
        jiami += alpha_upper[0 if index == 25 else index + 1]
    if jiami_origin[i].isdigit():
        index = int(jiami_origin[i]) + 1
        jiami += str(0) if index == 10 else str(index)
# print(jiami)
for i in range(len(jiemi_origin)):
    if jiemi_origin[i].isupper():
        index = alpha_upper[::-1].index(jiemi_origin[i])
        jiemi += alpha_lower[::-1][0 if index == 25 else index + 1]
    if jiemi_origin[i].islower():
        index = alpha_lower[::-1].index(jiemi_origin[i])
        jiemi += alpha_upper[::-1][0 if index == 25 else index + 1]
    if jiemi_origin[i].isdigit():
        index = number.index(jiemi_origin[i])
        jiemi += number[9] if index == 0 else str(index-1)

print(jiami)
print(jiemi)

发表于 2024-10-23 16:21:30 回复(0)
while True:
    try:
        def coded(string):
            new_str=''
            for x in string:
                if x.isdigit():
                    x=str((int(x)+1)%10)
                    new_str+=x
                elif x.isupper():
                    if x!="Z":
                        new_str+=chr(ord(x)+1).lower()
                    else:
                        new_str+="a"
                elif x.islower():
                    if x!="z":
                        new_str+=chr(ord(x)+1).upper()
                    else:
                        new_str+="A"
                else:
                    new_str+=x
            return new_str
        def uncoded(string):
            new_str=''
            for x in string:
                if x.isdigit():
                    x=str((int(x)+9)%10)
                    new_str+=x
                elif x.isupper():
                    if x!="A":
                        new_str+=chr(ord(x)-1).lower()
                    else:
                        new_str+="z"
                elif x.islower():
                    if x!="a":
                        new_str+=chr(ord(x)-1).upper()
                    else:
                        new_str+="Z"
                else:
                    new_str+=x
            return new_str
        print(coded(input()))
        print(uncoded(input()))

    except:
        break
加密时候用int做计算,+1然后除以十取余再回归str
解密时候也一样+9(+10-1以解决0的问题)除以十取余再回归
发表于 2024-10-14 21:51:05 回复(0)
拉表,拒绝index()
class CryptoMachine:
    def __init__(self) -> None:
        self.plain_letters = "abcdefghijklmnopqrstuvwxyz"
        self.ciphr_letters = "bcdefghijklmnopqrstuvwxyza"
        self.revrs_letters = "zabcdefghijklmnopqrstuvwxy"

        self.plain_numbers = "0123456789"
        self.ciphr_numbers = "1234567890"
        self.revrs_numbers = "9012345678"
        self.ord_a = ord("a")
        self.ord_A = ord("A")

    def encode(self, char: str):
        if char.isnumeric():
            return self.ciphr_numbers[int(char)]
        elif char.islower():
            index = ord(char) - self.ord_a
            return self.ciphr_letters[index].upper()
        elif char.isupper():
            index = ord(char) - self.ord_A
            return self.ciphr_letters[index]
        else:
            raise NotImplementedError

    def decode(self, char: str):
        if char.isnumeric():
            return self.revrs_numbers[int(char)]
        elif char.islower():
            index = ord(char) - self.ord_a
            return self.revrs_letters[index].upper()
        elif char.isupper():
            index = ord(char) - self.ord_A
            return self.revrs_letters[index]
        else:
            raise NotImplementedError
    
    def encode_string(self, s: str):
        return "".join(map(self.encode, s))
    
    def decode_string(self, s: str):
        return "".join(map(self.decode, s))
    
mc = CryptoMachine()
print(mc.encode_string(input()))
print(mc.decode_string(input()))


发表于 2024-09-25 18:10:40 回复(0)

def encryptuon(s):
data = ''
for i in s:
if i.isdigit():
if int(i) == 9:
data += '0'
else:
data += str(int(i)+1)
elif i.islower():
if i == 'z':
data += 'A'
else:
data +=chr(ord(i)+1).upper()
elif i.isupper():
if i == 'Z':
data += 'a'
else:
data += chr(ord(i)+1).lower()
else:
data += i
return data

def decrypt(s):
data = ''
for i in s:
if i.isdigit():
if int(i) == 0:
data += '9'
else:
data += str(int(i)-1)
elif i.islower():
if i == 'a':
data += 'Z'
else:
data += chr(int(ord(i))-1).upper()

elif i.isupper():
if i == 'A':
data += 'z'
else:
data += chr(int(ord(i))-1).lower()
else:
data += i
return data

while True:
try:
encp = input()
decp = input()
print(encryptuon(encp))
print(decrypt(decp))
except:
break


发表于 2024-08-10 22:52:40 回复(0)
def solve(str1):
    res = []
    for i in str1:
        if ord("a") <= ord(i) < ord("z"):
            res.append(chr(ord(i.upper())+1))
        elif ord("A") <= ord(i) < ord("Z"):
            res.append(chr(ord(i.lower())+1))
        elif i == "z":
            res.append("A")
        elif i == "Z":
            res.append("a")
        elif ord("0") <= ord(i) <= ord("8"):
            res.append(chr(ord(i)+1))
        elif i =="9":
            res.append("0")
        else:
            res.append(i)
    return "".join(res)

def solve2(str2):
    res = []
    for j in str2:
        if ord("b") <= ord(j) <= ord("z"):
            res.append(chr(ord(j.upper())-1))
        elif ord("B") <= ord(j) <= ord("Z"):
            res.append(chr(ord(j.lower())-1))
        elif j == "a":
            res.append("Z")
        elif j == "A":
            res.append("z")
        elif ord("1") <= ord(j) <= ord("9"):
            res.append(chr(ord(j)-1))
        elif j == "0":
            res.append("9")
        else:
            res.append(j)
    return "".join(res)

str1 = input()
str2 = input()
print(solve(str1))
print(solve2(str2))

发表于 2024-07-27 15:37:35 回复(0)
c = input()
a=""
e = input()
b = ""
for i in c:
    if i =="Z":
        a+="a"
    elif i =="z":
        a+="A"
    elif i>="A" and i<"Z":
        a+=chr(ord(i)+1).lower()
    elif i>="a" and i<"z":
        a+=chr(ord(i)+1).upper()
    elif i=="9":a+="0"
    elif i>="0" and i<"9":
        a+=chr(ord(i)+1)
for i in e:
    if i =="A":
        b+="z"
    elif i =="a":
        b+="Z"
    elif i>"A" and i<="Z":
        b+=chr(ord(i)-1).lower()
    elif i>"a" and i<="z":
        b+=chr(ord(i)-1).upper()
    elif i=="0":b+="9"
    elif i>"0" and i<="9":
        b+=chr(ord(i)-1)

print(a)
print(b)
发表于 2024-07-01 19:22:06 回复(0)
def jia_jie_mi(s, k):
    upper_word = [chr(ord("A") + i) for i in range(26)]
    lower_word = [chr(ord("a") + i) for i in range(26)]
    nums = [str(i) for i in range(10)]
    ss = []

    def jia_mi(s):
        for str1 in s:
            if str1 in upper_word + lower_word:
                if str1 == "Z":
                    ss.append("a")
                elif str1 == "z":
                    ss.append("A")
                elif str1 in upper_word:
                    j = upper_word.index(str1)
                    ss.append(lower_word[j + 1])
                elif str1 in lower_word:
                    j = lower_word.index(str1)
                    ss.append(upper_word[j + 1])
            elif str1 in nums:
                if str1 == "9":
                    ss.append("0")
                else:
                    ss.append(str(int(str1) + 1))
        s_jia_mi = "".join(ss)
        print(s_jia_mi)

    def jie_mi(s):
        for str2 in s:
            if str2 in upper_word + lower_word:
                if str2 == "A":
                    ss.append("z")
                elif str2 == "A":
                    ss.append("z")
                elif str2 in upper_word:
                    j = upper_word.index(str2)
                    ss.append(lower_word[j - 1])
                elif str2 in lower_word:
                    j = lower_word.index(str2)
                    ss.append(upper_word[j - 1])
            elif str2 in nums:
                if str2 == "0":
                    ss.append("9")
                else:
                    ss.append(str(int(str2) - 1))
        s_jie_mi = "".join(ss)
        print(s_jie_mi)

    if k == 1:
        jia_mi(s)
    if k == 2:
        jie_mi(s)


s1 = input()
s2 = input()
jia_jie_mi(s1, 1)
jia_jie_mi(s2, 2)

发表于 2024-06-20 14:03:20 回复(0)
def en_secret(secret: str):
    list_out = []
    for s in secret:
        if s.isdigit():
            if s == '9':
                list_out.append('0')
            else:
                list_out.append(str(int(s) + 1))
        else:
            if s.upper() == 'Z':
                list_out.append('a' if s.isupper() else 'A')
            else:
                next_lower = chr(ord(s.lower()) + 1)
                list_out.append(next_lower if s.isupper() else next_lower.upper())
    return ''.join(list_out)

def de_secret(secret: str):
    list_out = []
    for s in secret:
        if s.isdigit():
            if s == '0':
                list_out.append('9')
            else:
                list_out.append(str(int(s) - 1))
        else:
            if s.upper() == 'A':
                list_out.append('z' if s.isupper() else 'Z')
            else:
                before_lower = chr(ord(s.lower()) - 1)
                list_out.append(before_lower if s.isupper() else before_lower.upper())
    return ''.join(list_out)

print(en_secret(input()))
print(de_secret(input()))

编辑于 2024-04-24 13:58:50 回复(0)
def Encryption(item):
    new_str = ""
    for i in item:
        if str(i).isalpha():
            if i == "z":
                new_str = new_str + "A"
            elif i == "Z":
                new_str = new_str + "a"
            else:
                new_str = new_str + chr(ord(i) + 1).swapcase()
        elif i.isnumeric():
            if i == "9":
                new_str = new_str + "0"
            else:
                new_str = new_str + str(int(i) + 1)
        else:
            pass
    return new_str
def Decrypt(item):
    new_str = ""
    for i in item:
        if str(i).isalpha():
            if i == "a":
                new_str = new_str + "Z"
            elif i == "A":
                new_str = new_str + "z"
            else:
                new_str = new_str + chr(ord(i) - 1).swapcase()
        elif i.isnumeric():
            if i == "0":
                new_str = new_str + "9"
            else:
                new_str = new_str + str(int(i) - 1)
        else:
            pass
    return new_str
if __name__ == "__main__":
    s1 = input()
    s2 = input()
    print(Encryption(s1))
    print(Decrypt(s2))

编辑于 2024-04-05 15:01:22 回复(0)
alp_u = "ABCDEFGHIJKLMNOPQRSTUVWXYZA"
alp_l = "abcdefghijklmnopqrstuvwxyza"
num_l = "01234567890"

# 编码函数
def code(s1: str):
    s1_d = ""
    for i in s1:
        if i in alp_u:
            s1_d += alp_l[alp_u.index(i) + 1]
        elif i in alp_l:
            s1_d += alp_u[alp_l.index(i) + 1]
        elif i in num_l:
            s1_d += num_l[num_l.index(i) + 1]

    return s1_d

# 解码函数
def decode(s2: str):
    s2_c = ""
    for i in s2:
        if i in alp_u:
            if i == "A":
                s2_c += "z"
            else:
                s2_c += alp_l[alp_u.index(i) - 1]
        if i in alp_l:
            if i == "a":
                s2_c += "Z"
            else:
                s2_c += alp_u[alp_l.index(i) - 1]
        if i in num_l:
            if i == '0':
                s2_c += '9'
            else:
                s2_c += num_l[num_l.index(i) - 1]
    
    return s2_c


print(code(input()))
print(decode(input()))

编辑于 2024-03-27 21:56:51 回复(0)
比不上大佬们的映射做法,用了ascii码

def encrypt(pw):
    pw_new = ''
    for i in pw:
        a = ord(i)
        if a in range(48,57):
            pw_new += chr(a+1)
        elif a == 57:
            pw_new += chr(48)
        elif a in range(65,90):
            pw_new += chr(a+1).lower()
        elif a == 90:
            pw_new += chr(65).lower()
        elif a in range(97,122):
            pw_new += chr(a+1).upper()
        else:
            pw_new += chr(97).upper()
    return pw_new


def decrypt(pw):
    pw_new = ''
    for i in pw:
        a = ord(i)
        if a in range(49,58):
            pw_new += chr(a-1)
        elif a == 48:
            pw_new += chr(57)
        elif a in range(66,91):
            pw_new += chr(a-1).lower()
        elif a == 65:
            pw_new += chr(90).lower()
        elif a in range(98,123):
            pw_new += chr(a-1).upper()
        else:
            pw_new += chr(122).upper()
    return pw_new

while True:
    try:
        print(encrypt(input()))
        print(decrypt(input()))
    except:
        break




发表于 2024-03-20 16:36:58 回复(0)
import sys

encode = input().strip()
decode = input().strip()

result1 = ''
for i in encode:
    if i.islower():
        result1 += chr(ord(i)-31) if i != 'z' else 'A'
    elif i.isupper():
        result1 += chr(ord(i)+33) if i != 'Z' else 'a'
    elif i.isnumeric():
        result1 += str(int(i)+1) if i != '9' else '0'
    else:
        result1 += i

result2 = ''
for i in decode:
    if i.islower():
        result2 += chr(ord(i)-33) if i != 'a' else 'Z'
    elif i.isupper():
        result2 += chr(ord(i)+31) if i != 'A' else 'z'
    elif i.isnumeric():
        result2 += str(int(i)-1) if i != '0' else '9'
    else:
        result2 += i


print(result1)
print(result2)
发表于 2023-10-17 18:36:08 回复(0)
这题目也没有说两个输入之间互为逆关系啊
from string import ascii_lowercase,ascii_uppercase,digits
def encrypt(s):
    res = ''
    for c in s:
        if c in ascii_lowercase:
            index = ascii_lowercase.index(c)
            res += ascii_uppercase[(index+1)%26]
        elif c in ascii_uppercase:
            index = ascii_uppercase.index(c)
            res += ascii_lowercase[(index+1)%26]
        else:
            res += str((int(c)+1)%10)
    return res
def decrypt(s):
    res = ''
    for c in s:
        if c in ascii_lowercase:
            index = ascii_lowercase.index(c)
            res += ascii_uppercase[(index-1)%26]
        elif c in ascii_uppercase:
            index = ascii_uppercase.index(c)
            res += ascii_lowercase[(index-1)%26]
        else:
            res += str((int(c)-1)%10)
    return res
s1=input()
s2=input()
print(encrypt(s1))
print(decrypt(s2))


发表于 2023-08-24 07:35:19 回复(0)
import sys
import string


def encrypt(s):
    encrypted = ""
    for char in s:
        if char.isalpha():
            if char.islower():
                encrypted += chr((ord(char) - ord("a") + 1) % 26 + ord("A"))
            else:
                encrypted += chr((ord(char) - ord("A") + 1) % 26 + ord("a"))
        elif char.isdigit():
            encrypted += str((int(char) + 1) % 10)
        else:
            encrypted += char
    return encrypted


def decrypt(s):
    decrypted = ""
    for char in s:
        if char.isalpha():
            if char.islower():
                decrypted += chr((ord(char) - ord("a") - 1) % 26 + ord("A"))
            else:
                decrypted += chr((ord(char) - ord("A") - 1) % 26 + ord("a"))
        elif char.isdigit():
            decrypted += str((int(char) - 1) % 10)
        else:
            decrypted += char
    return decrypted


# 输入要加密的密码
password = input()

# 加密密码
encrypted_password = encrypt(password)
print(encrypted_password)

# 输入加密过的密码
encrypted_input = input()

# 解密密码
decrypted_password = decrypt(encrypted_input)
print(decrypted_password)

对于输入字符串s中的每个字符char,我们按照以下规则进行加密:

  • 如果 char 是字母,则根据其大小写进行不同的处理:
    • 如果 char 是小写字母,我们将其转换为其后一个字母的大写形式。
    • 如果 char 是大写字母,我们将其转换为其后一个字母的小写形式。
  • 如果 char 是数字,则将其加一后取余数(除以 10 取余)。
  • 如果 char 不是字母或数字,则保持不变。
最后,将加密后的字符拼接到encrypted字符串中,并返回最终的加密结果。

对于输入字符串s中的每个字符char,我们按照以下规则进行解密:

  • 如果 char 是字母,则根据其大小写进行不同的处理:
    • 如果 char 是小写字母,我们将其转换为其前一个字母的大写形式。
    • 如果 char 是大写字母,我们将其转换为其前一个字母的小写形式。
  • 如果 char 是数字,则将其减一后取余数(除以 10 取余)。
  • 如果 char 不是字母或数字,则保持不变。

最后,将解密后的字符拼接到decrypted字符串中,并返回最终的解密结果。



发表于 2023-08-23 17:57:15 回复(0)
import json
a = [i for i in range(0, 9)]
b = [i for i in range(1, 10)]
a_dict = {}
a_dict = dict(zip(a, b))
a_dict[9] = 0
a_dict = {str(key): str(value) for key, value in a_dict.items()}
a_dict = json.dumps(a_dict, ensure_ascii=False)
c = [chr(uppercase) for uppercase in range(ord("A"), ord("Z") + 1)]
d = [chr(lowercase) for lowercase in range(ord("a") + 1, ord("z") + 2)]
e = [chr(lowercase) for lowercase in range(ord("a"), ord("z") + 1)]
f = [chr(uppercase) for uppercase in range(ord("A") + 1, ord("Z") + 2)]
b_dict = dict(zip(c, d))
c_dict = dict(zip(e, f))
b_dict["Z"] = "a"
c_dict["z"] = "A"
d_dict = {}
d_dict.update(json.loads(a_dict))
d_dict.update(b_dict)
d_dict.update(c_dict)
d_dict = {str(key): str(value) for key, value in d_dict.items()}
s_dict = {value: key for key, value in d_dict.items()}
s_dict.update({"9": "8"})
s = input()
t = input()
for i in s:
    if i in d_dict:
        print(str(d_dict[i]), end="")
print()
for j in t:
    if j in s_dict:
        print(str(s_dict[j]), end="")
print()
发表于 2023-07-27 21:16:59 回复(0)