首页 > 试题广场 >

字符串加解密

[编程题]字符串加解密
  • 热度指数:290465 时间限制: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
s = input()
t = input()

def funa(x):
    if x.isdigit():
        if x == '9':
            return '0'
        else:
            return str(int(x)+1)
    else:
        flag = 1
        if x.isupper():
            x = x.lower()
            flag = 0
        if x == 'z':
            x = 'a'
        else:
            x = chr(ord(x)+1)
        if flag == 1:
            x = x.upper()
        return x

def funb(x):
    if x.isdigit():
        if x == '0':
            return '9'
        else:
            return str(int(x)-1)
    else:
        flag = 1
        if x.isupper():
            x = x.lower()
            flag = 0
        if x == 'a':
            x = 'z'
        else:
            x = chr(ord(x)-1)
        if flag == 1:
            x = x.upper()
        return x

s_, t_ = "", ""
for i in (s):
    s_ = s_ + funa(i)

for i in (t):
    t_ = t_ + funb(i)

print(s_)
print(t_)

发表于 2026-02-02 01:09:29 回复(0)
import sys
# 加密
def encryption(words:str):
    result = ''
    for word in words:
        if word.isalpha() and word.isupper():
            result += 'a' if word == 'Z' else chr(ord(word.lower())+1)
        elif word.isalpha() and word.islower():
            result += 'A' if word == 'z' else chr(ord(word.upper())+1) 
        else:
            result +='0' if word =='9' else str(int(word)+1) 
    return result 

def decryption(words:str):
    result = ''
    for word in words:
        if word.isalpha() and word.isupper():
            result += 'z' if word == 'A' else chr(ord(word.lower())-1)
        elif word.isalpha() and word.islower():
            result += 'Z' if word == 'a' else chr(ord(word.upper())-1) 
        else:
            result +='9' if word == '0' else str(int(word)-1) 
    return result 
s = input()
t = input()
print(encryption(s))
print(decryption(t))

发表于 2025-12-01 23:35:13 回复(0)
import sys

def main():
    s,t = [line.strip() for line in sys.stdin]
    print(encrypt(s))
    print(decrypt(t))

def encrypt(pwd:str):
    """加密"""
    if len(pwd)<=0:
        return False
    en_pwd = ""
    for char in pwd:
        if not char:
            continue
        if char.isupper():
            if char == "Z":
                en_pwd += "a"
            else:
                en_pwd += chr(ord(char.lower())+1)
        elif char.islower():
            if char == "z":
                en_pwd += "A"
            else:
                en_pwd += chr(ord(char.upper())+1)
        elif char.isdigit():
            if char == "9":
                en_pwd += "0"
            else:
                en_pwd += str(int(char)+1)
    return en_pwd
def decrypt(pwd:str):
    """解密"""
    if len(pwd)<=0:
        return False
    de_pwd = ""
    for char in pwd:
        if not char:
            continue
        if char.isupper():
            if char == "A":
                de_pwd += "z"
            else:
                de_pwd += chr(ord(char.lower())-1)
        elif char.islower():
            if char == "a":
                de_pwd += "Z"
            else:
                de_pwd += chr(ord(char.upper())-1)
        elif char.isdigit():
            if char == "0":
                de_pwd += "9"
            else:
                de_pwd += str(int(char)-1)
    return de_pwd


main()

发表于 2025-10-24 20:33:21 回复(0)
# 暴力
a_dick = {'A':'b','B':'c','C':'d','D':'e','E':'f','F':'g','G':'h','H':'i','I':'j','J':'k','K':'l','L':'m','M':'n','N':'o','O':'p','P':'q','Q':'r','R':'s','S':'t','T':'u','U':'v','V':'w','W':'x','X':'y','Y':'z','Z':'a','a':'B','b':'C','c':'D','d':'E','e':'F','f':'G','g':'H','h':'I','i':'J','j':'K','k':'L','l':'M','m':'N','n':'O','o':'P','p':'Q','q':'R','r':'S','s':'T','t':'U','u':'V','v':'W','w':'X','x':'Y','y':'Z','z':'A','0':'1','1':'2','2':'3','3':'4','4':'5','5':'6','6':'7','7':'8','8':'9','9':'0'}

s = input().strip()
n = input().strip()

s_res = ''
n_res = ''
for i in s:
    for key,value in a_dick.items():
        if i == key:
            s_res  += value

for i in n:
    for key,value in a_dick.items():
        if i == value:
            n_res  += key
    
print(s_res)
print(n_res)

发表于 2025-06-10 20:59:25 回复(1)
import sys

dic_shun = {}
for i in range(97,122):
    dic_shun[chr(i)] = chr(i-31)
for i in range(65,90):
    dic_shun[chr(i)] = chr(i+33)
dic_shun['z'] = 'A'
dic_shun['Z'] = 'a'
for i in range(0,9):
    dic_shun[str(i)] = str(i+1)
dic_shun['9'] = '0'
dic_ni = {}
for k,v in dic_shun.items():
    dic_ni[v] = k

s1 = input()
s1_output = ''
for string in s1:
    s1_output += dic_shun[string]
print(s1_output)  

s2 = input()
s2_output = ''
for string in s2:
    s2_output += dic_ni[string]
print(s2_output)  
发表于 2025-04-12 16:33:45 回复(0)
一切为了优雅

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


发表于 2025-01-17 02:09:53 回复(1)
# 接受包含加密前和加密后密码的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)