Java小案例——对字符串进行加密解密

本文通过Java实现了一个字符串加密解密的小案例,利用异或和位运算进行操作。文章详细介绍了加密和解密的过程,并解析了其工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要求:
   *  对用户输入的每个字符的值进行加密,将解密后的字符串输出
   *  对用户输入的已加密字符串进行解密并输出

实现代码:

import java.util.Scanner;
/**
 * 要求:
 *     1.对用户输入的每个字符的值进行加密,将解密后的字符串输出
 *     2.对用户输入的已加密字符串进行解密并输出
 * @author Administration
 *
 */
public class Encryption {

    public static void main(String[] args) {
        Scanner input = 
### Java 后端使用 RSA 加密由前端 JavaScript 解密 #### 使用场景说明 为了实现安全通信,在Java后端采用非对称加密算法RSA来保护数据传输的安全性。由于HTTPS已经提供了通道层面的安全保障[^2],在此基础上进一步增强应用层的数据安全性是有必要的。 #### 实现方案概述 在本案例中,服务器端负责生成一对公私钥,利用私钥完成消息的签名或加密操作;客户端则保存对应的公钥用于验证签名或解密接收到的信息。需要注意的是,通常情况下是由服务端持有私钥而向外界分发公钥,但在某些特殊应用场景下也可以反向操作——即服务端执行加密动作,交由拥有相应私钥的一方来进行解处理。 #### Java 后端代示例 下面给出一段简单的Java程序片段展示如何创建RSA密钥对以及使用该密钥对中的私钥进行字符串加密: ```java import javax.crypto.Cipher; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; public class RSACrypto { public static void main(String[] args) throws Exception { // Generate Key Pair final KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(2048); final KeyPair pair = keyGen.generateKeyPair(); PrivateKey privateKey = pair.getPrivate(); PublicKey publicKey = pair.getPublic(); String originalText = "This is a secret message."; byte[] encryptedBytes = encrypt(privateKey, originalText.getBytes()); System.out.println("Encrypted Text: "+ new String(encryptedBytes)); // Normally you would send 'publicKey' & 'encryptedBytes' to client side. // Here we just decrypt it again with the same private key for demonstration purpose only. byte[] decryptedBytes = decrypt(publicKey, encryptedBytes); System.out.println("Decrypted Text: "+new String(decryptedBytes)); } private static byte[] encrypt(PrivateKey privateKey, byte[] plainText) throws Exception{ Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.ENCRYPT_MODE, privateKey); return cipher.doFinal(plainText); } private static byte[] decrypt(PublicKey publicKey, byte[] cipherText) throws Exception{ Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.DECRYPT_MODE, publicKey); return cipher.doFinal(cipherText); } } ``` #### 前端JavaScript解密逻辑 对于浏览器环境下的JavaScript来说,直接支持原生RSA解密的功能较为有限。可以借助第三方库如`jsrsasign`简化这一过程。以下是基于此库的一个简单例子,假设已获取到Base64编后的PEM格式私钥和待解密的内容: ```javascript // Import jsrsasign library via CDN or npm/yarn installation const KEYUTIL = require('jsrsasign').KEYUTIL; function rsaDecrypt(base64PemPrivateKey, base64EncodedCipherText){ try { const pkcs1prvkeyb64 = base64PemPrivateKey.replace(/-/g,"").replace("_","/"); let hexaPKCS1PRVKey = b64tohex(pkcs1prvkeyb64); // Convert Base64 string into hexadecimal format var prvKeyObj = KEYUTIL.getKeyFromPlainPrivateHex(hexaPKCS1PRVKey); var decDataHex = KJUR.crypto.Cipher.decrypt({alg:"RSA", pubpri:pkcs1prvkeyb64}, base64EncodedCipherText); console.log(`Decrypted text:${String.fromCharCode.apply(null, hextoba(decDataHex))}`); } catch (e) { console.error(e.message); } } // Utility functions omitted here... ``` 请注意上述JavaScript部分仅作为概念证明用途,实际项目开发时还需考虑更多细节问题比如错误处理机制、性能优化等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值