C++蓝桥杯2023.10:密文解密

编程实现:密文解密

题目描述
有一段密文,加密规律如下:
原文中所有的字符在字母表中的位置被左移了若干位(如:a左移一位后为2,A左移一位后为2,f左移三位后为c......).
例如:密文为Ayz,已知加密时原文中的字母被左移了3位,解密后,原文是Dbc。
请根据这个规律,对密文进行解密。
输入描述
共两行
第一行输入一个只包含大小写字母的字符串《长度小于100),表示密文第二行输入一个正整数n(1n≤100000),表示原文中的字母在字母表中的位置被左移的位数输出描述
输出一个字符串,表示解密后的原文
样输入:
Ayz
3
样例输出:
Dbc

#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;
	int n;
	cin>>s>>n;
	for(int i=0;i<s.length();i++){
		if(s[i]>='A'&&s[i]<='Z'){
			if(s[i]+n<='Z'){
				s[i]+=n;
			}else{
				s[i]=s[i]+n-'Z'+'A'-1;
			}
		}else if(s[i]>='a'&&s[i]<='z'){
			if(s[i]+n<='z'){
				s[i]+=n;
			}else{
				s[i]=s[i]+n-'z'+'a'-1;
			}
		}	 
	}
	cout<<s;
	return 0;
}

以下是Java使用DES算法进行加密解密的示例代码: ``` import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.util.Base64; public class DESUtil { // 加密 public static String encrypt(String plaintext, String key) { try { Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "DES"); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); return Base64.getEncoder().encodeToString(encryptedBytes); } catch (Exception e) { e.printStackTrace(); return null; } } // 解密 public static String decrypt(String ciphertext, String key) { try { Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "DES"); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(ciphertext)); return new String(decryptedBytes, StandardCharsets.UTF_8); } catch (Exception e) { e.printStackTrace(); return null; } } public static void main(String[] args) { String plaintext = "hello world"; String key = "12345678"; String ciphertext = encrypt(plaintext, key); System.out.println("加密后的密文:" + ciphertext); String decryptedText = decrypt(ciphertext, key); System.out.println("解密后的明文:" + decryptedText); } } ``` 上述代码加密解密的核心部分都使用了Java的Cipher类来完成。在加密解密时,需要指定加密算法、工作模式和填充方式,这里使用了DES算法、ECB模式和PKCS5Padding填充方式。同时,还需要使用SecretKeySpec类来指定密钥,并通过init方法初始化Cipher对象。在加密时,将明文转换为字节数组,然后调用doFinal方法进行加密操作,最后使用Base64进行编码。在解密时,将密文使用Base64进行解码,然后调用doFinal方法进行解密操作,最后将解密后的字节数组转换为字符串。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值