首页 > 试题广场 >

字符串加解密

[编程题]字符串加解密
  • 热度指数:256732 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

对输入的字符串进行加解密,并输出。

加密方法为:

当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;

当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;

其他字符不做变化。

解密方法为加密的逆过程。
数据范围:输入的两个字符串长度满足 ,保证输入的字符串都是只由大小写字母或者数字组成

输入描述:

第一行输入一串要加密的密码
第二行输入一串加过密的密码



输出描述:

第一行输出加密后的字符
第二行输出解密后的字符

示例1

输入

abcdefg
BCDEFGH

输出

BCDEFGH
abcdefg
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)
def en(input_str):
    res_str = ''
    for i in input_str:
        if i.islower():
            if i == 'z':
                i = 'A'
            else:
                i = chr(ord(i) - 32 + 1)
        elif i.isupper():
            if i == 'Z':
                i = 'a'
            else:
                i = chr(ord(i) + 32 + 1)
        elif i.isdigit():
            if i == '9':
                i = '0'
            else:
                i = str(int(i) + 1)
        res_str += i
    return res_str


def de(input_str):
    res_str = ''
    for i in input_str:
        if i.islower():
            if i == 'a':
                i = 'Z'
            else:
                i = chr(ord(i) - 32 - 1)
        elif i.isupper():
            if i == 'A':
                i = 'z'
            else:
                i = chr(ord(i) + 32 - 1)
        elif i.isdigit():
            if i == '0':
                i = '9'
            else:
                i = str(int(i) - 1)
        res_str += i
    return res_str

input_str1,input_str2  = input(), input()
print(en(input_str1))
print(de(input_str2))

发表于 2023-07-05 16:56:18 回复(0)
import sys

s1 = input().strip()
s2 = input().strip()

# 加密
def jiami(s):
    res = ""
    for i in s:
        if i.isupper() : # 如果是大写
            if i == 'Z':
                res+= 'a'
            else:
                res+= chr(ord(i)+32+1)
        elif i.islower(): # 如果是小写
            if i == 'z':
                res+='A'
            else:
                res+=chr(ord(i)-32+1)
        elif i.isdigit():
            if int(i) == 9:
                res+='0'
            else:
                res += str(int(i)+1)
    return res

# 解密
def jiemi(s):
    res = ""
    for i in s:
        if i.isupper() : # 如果是大写
            if i == 'A':
                res+= 'z'
            else:
                res+= chr(ord(i)+32-1)
        elif i.islower(): # 如果是小写
            if i == 'a':
                res+='Z'
            else:
                res+=chr(ord(i)-32-1)
        elif i.isdigit(): # 如果是数字
            if int(i) == 0:
                res+='9'
            else:
                res += str(int(i)-1)
    return res

print(jiami(s1))
print(jiemi(s2))

发表于 2023-07-01 14:08:57 回复(0)
jige = list(input())
nige = list()
heizi = list(input())
kunkun = list()
i = 0
for i in range(i,len(jige)):
    if jige[i].islower():
       if jige[i] == 'z':
           nige.insert(i, 'A')
       else:
           nige.insert(i, chr(ord(jige[i])-31))
    elif jige[i].isupper():
       if jige[i] == 'Z':
           nige.insert(i, 'a')
       else:
           nige.insert(i, chr(ord(jige[i])+33))
    elif jige[i].isdigit():
        if int(jige[i]) == 9:
            nige.insert(i,'0')
        else:
            nige.insert(i,chr(ord(jige[i]) + 1))
    else:
        nige.insert(i,jige[i])
print(''.join(nige))
i = 0
for i in range(i,len(heizi)):
    if heizi[i].islower():
       if heizi[i] == 'a':
           kunkun.insert(i, 'Z')
       else:
           kunkun.insert(i, chr(ord(heizi[i])-33))
    elif heizi[i].isupper():
       if heizi[i] == 'A':
           kunkun.insert(i, 'z')
       else:
           kunkun.insert(i, chr(ord(heizi[i])+31))
    elif heizi[i].isdigit():
        if int(heizi[i]) == 0:
            kunkun.insert(i,'9')
        else:
            kunkun.insert(i,chr(ord(heizi[i]) - 1))
    else:
        kunkun.insert(i,heizi[i])
print(''.join(kunkun))
发表于 2023-07-01 10:29:34 回复(1)
key1=list(input())
key2=list(input())
key1_add=[]
key2_remove=[]
MP1='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
MP2='0123456789'
MP1List=[]
MP2List=[]
for each in MP1:
    MP1List.append(each)
for each in MP2:
    MP2List.append(each)

def add_key(str1):
    n=ord(str(str1))
    #print(n)
    if n>=65 and n<90:
        n=n-64
        key_str=MP1List[n].lower()
        return key_str
    if n==90:
        key_str='a'
        return key_str
    if n>=97 and n<122:
        n=n-96
        key_str=MP1List[n].upper()
        return key_str
    if n==122:
        key_str='A'
        return key_str
    else:
        if n>=48 and n<57:
            n=n-47
            #print(n)
            key_str=MP2List[n]
            return key_str
        if n==57:
            key_str='0'
            return key_str
   
def remove_key(str1):
    n=ord(str(str1))
    #print(n)
    if n>65 and n<=90:
        n=n-66
        key_str=MP1List[n].lower()
        return key_str
    if n==65:
        key_str='z'
        return key_str
    if n>97 and n<=122:
        n=n-98
        key_str=MP1List[n].upper()
        return key_str
    if n==97:
        key_str='Z'
        return key_str
    else:
        if n>48 and n<=57:
            n=n-49
            key_str=MP2List[n]
            return key_str
        if n==48:
            key_str='9'
            return key_str

for each in key1:
    key1_add.append(add_key(each))
for each in key2:
    key2_remove.append(remove_key(each))  

print(''.join(key1_add))
print(''.join(key2_remove))
发表于 2023-04-19 23:31:26 回复(0)
def encrypt(text:str)->str:
    res=''
    for i in text:
        if i=='Z':
            res+='a'
            continue
        if i=='z':
            res+='A'
            continue
        if i=='9':
            res+='0'
            continue
        if 65<=ord(i)<90:
            res+=chr(ord(i)+33)
            continue
        if 97<=ord(i)<122:
            res+=chr(ord(i)-31)
            continue
        if 48<=ord(i)<57:
            res+=chr(ord(i)+1)
    return res

def decrypt(text:str)->str:
    res=''
    for i in text:
        if i=='a':
            res+='Z'
            continue
        if i=='A':
            res+='z'
            continue
        if i=='0':
            res+='9'
            continue
        if 65<ord(i)<=90:
            res+=chr(ord(i)+31)
            continue
        if 97<ord(i)<=122:
            res+=chr(ord(i)-33)
            continue
        if 48<ord(i)<=57:
            res+=chr(ord(i)-1)
    return res

pw1=input()
pw2=input()
print(encrypt(pw1))
print(decrypt(pw2))

发表于 2023-04-19 11:22:08 回复(0)
import sys

input_list = []

def encryption(x:str) -> str:
    y = ''
    for s in x:
        if s.isupper() == True and s != 'Z':
            s = chr(ord(s) + 33)
        elif s.islower() == True and s != 'z':
            s = chr(ord(s) - 31)
        elif s.isdigit() == True and s != '9':
            s = str(int(s) + 1)
        elif s == '9':
            s = '0'
        elif s == 'Z':
            s = 'a'
        elif s == 'z':
            s = 'A'
        y = y + s
    
    return y

def decryption(x:str) -> str:
    y = ''
    for s in x:
        if s.isupper() == True and s != 'A':
            s = chr(ord(s) + 31)
        elif s.islower() == True and s != 'a':
            s = chr(ord(s) - 33)
        elif s.isdigit() == True and s != '0':
            s = str(int(s) - 1)
        elif s == '0':
            s = '9'
        elif s == 'A':
            s = 'z'
        elif s == 'a':
            s = 'Z'
        y = y + s
    return y

if __name__ == '__main__':
    
    for line in sys.stdin:
        a = line.split()
        input_list.append(a[0])
    
    output_1 = encryption(input_list[0])
    output_2 = decryption(input_list[1])

    print(output_1, end='\n')
    print(output_2)

发表于 2023-03-28 21:24:36 回复(0)
while True:
    try:
        A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
        B = 'bcdefghijklmnopqrstuvwxyzaBCDEFGHIJKLMNOPQRSTUVWXYZA1234567890'

        jia = input()
        jie = input()

        a = ''
        b = ''
        for i in jia:
            if i.isalpha() or i.isdigit():
                a += B[A.index(i)]
            else:
                a += i
       
        for j in jie:
            if j.isalpha() or j.isdigit():
                b += A[B.index(j)]
            else:
                b += j
        print(a)
        print(b)
    except:
        break
发表于 2023-03-27 21:52:50 回复(1)
def trans(s, key, val):
    dic = dict(zip(key, val))
    return ''.join(dic[i] for i in s)

key = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
val = "bcdefghijklmnopqrstuvwxyzaBCDEFGHIJKLMNOPQRSTUVWXYZA1234567890"
print(trans(input(), key, val))
print(trans(input(), val, key))

发表于 2023-03-21 20:29:02 回复(1)
import string
def pwd_jia(us_pwd: str):
    jia_pwd = ""
    for item in us_pwd:
        if item.islower():
            _idx = string.ascii_uppercase.index(item.upper()) + 1
            _s = string.ascii_uppercase[0 if _idx > 26 else _idx]
        elif item.isupper():
            _idx = string.ascii_lowercase.index(item.lower()) + 1
            _s = string.ascii_lowercase[0 if _idx > 26 else _idx]
        elif item.isdigit():
            _s = 0 if int(item) > 8 else int(item) + 1
        else:
            _s = item
        jia_pwd += _s
    return jia_pwd
def pwd_jian(us_pwd: str):
    jian_pwd = ""
    for item in us_pwd:
        if item.islower():
            _idx = string.ascii_uppercase.index(item.upper()) - 1
            _s = string.ascii_uppercase[26 if _idx < 0 else _idx]
        elif item.isupper():
            _idx = string.ascii_lowercase.index(item.lower()) - 1
            _s = string.ascii_lowercase[26 if _idx < 0 else _idx]
        elif item.isdigit():
            _s = 9 if int(item) == 0 else int(item) - 1
        else:
            _s = item
        jian_pwd += _s
    return jian_pwd
while True:
    try:
        print(pwd_jia(input()))
        print(pwd_jian(input()))
    except:
        break
发表于 2023-03-20 00:02:17 回复(0)

问题信息

难度:
41条回答 49081浏览

热门推荐

通过挑战的用户

查看代码