基于对象的编码加密方法

基于对象的编码加密方法

对象在传输时,需要加密,加密先将对象转化为二进制的字节流,再对流进行加密或编码处理,处理完成后进行传输,接受后解密。传输对象必须实现java.io.Serializable

对象按在内存中变成字节流,需要借助字节输入/输出流来处理。


package test;

 

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.util.Date;

 

import org.apache.xerces.impl.dv.util.Base64;

 

import com.bjnja.core.db.entities.BaseEntity;

 

public class MyObjEncodeTest {

        publicstatic void main(String[] args) throws IOException,

                       ClassNotFoundException{

               // 创建2个对象

               Students1 = new Student("李平",19,1.2345);

               Students2 = new Student("王兵",20,2.3456);

 

               // 创建一个字节输出流,字节流预设为4K

               ByteArrayOutputStreambos = new ByteArrayOutputStream(1024*4);

               // 创建对象输出流,使用字节流进行构造

               ObjectOutputStreamos = new ObjectOutputStream(bos);

               // 写入对象

               os.writeObject(s1);

               os.writeObject(s2);

               // 关闭输出流

               os.close();

               // 从这节输出流中取出字节数组

               bytebin1[] = bos.toByteArray();

               // 关闭输出字节流

               bos.close();

              

               // 对对象流编码,或加密

               Strings = Base64.encode(bin1);

               System.out.println(bos.toByteArray().length);

 

               // 再对上面的数据解码

               bytebin2[] = Base64.decode(s);

               // 创建输入字节流对象,使用解析后的字节流

               ByteArrayInputStreamis = new ByteArrayInputStream(bin2);

               // 创建对象输入流

               ObjectInputStreamois = new ObjectInputStream(is);

               // 从流中读取象1

               Objecto = ois.readObject();

               System.out.println(o.getClass().getName());

               // 输出对象

               System.out.println(o);

 

               // 从流中读取象2

               o =ois.readObject();

               System.out.println(o);

        }

}

 

/*

* 测试使用的对象,对象中包含 串/整数,浮点,和字节对象

*/

class Student implements BaseEntity {

        String name;

        int age;

        double tall;

        Date d = newDate();

 

        Student(Stringn, int a, double t) {

               this.name= n;

               this.age= a;

               this.tall= t;

        }

 

        publicString toString() {

               return"Student {" + name + ";"+ age + "," +tall+","+ d.toString() + "}";

        }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端Vue传递加密密文到后端Java,后解密的示例代码如下: 前端Vue加密代码: ```javascript // 导入jsencrypt库 import JSEncrypt from 'jsencrypt' // 创建RSA加密实例 const encrypt = new JSEncrypt() // 设置RSA公钥 const publicKey = 'YOUR_RSA_PUBLIC_KEY' encrypt.setPublicKey(publicKey) // 要加密的数据 const data = 'YOUR_DATA_TO_ENCRYPT' // 使用RSA公钥进行加密 const encryptedData = encrypt.encrypt(data) // 将加密后的数据发送到后端 // 例如使用axios发送POST请求 axios.post('/api/decrypt', { encryptedData }) .then(response => { console.log(response.data) }) .catch(error => { console.error(error) }) ``` 后端Java解密代码: ```java import org.apache.commons.codec.binary.Base64; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.crypto.Cipher; import java.nio.charset.StandardCharsets; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.spec.PKCS8EncodedKeySpec; @RestController public class DecryptionController { // 将Base64编码后的私钥字符串转换为PrivateKey对象 private PrivateKey getPrivateKey(String privateKeyStr) throws Exception { byte[] privateKeyBytes = Base64.decodeBase64(privateKeyStr); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); return keyFactory.generatePrivate(keySpec); } @PostMapping("/api/decrypt") public String decryptData(@RequestBody EncryptedData encryptedData) throws Exception { String privateKeyStr = "YOUR_RSA_PRIVATE_KEY"; PrivateKey privateKey = getPrivateKey(privateKeyStr); // 使用私钥进行解密 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] encryptedBytes = Base64.decodeBase64(encryptedData.getEncryptedData()); byte[] decryptedBytes = cipher.doFinal(encryptedBytes); // 返回解密后的数据 return new String(decryptedBytes, StandardCharsets.UTF_8); } } ``` 创建一个名为 `EncryptedData` 的Java类,用于接收前端传递的加密数据: ```java public class EncryptedData { private String encryptedData; public String getEncryptedData() { return encryptedData; } public void setEncryptedData(String encryptedData) { this.encryptedData = encryptedData; } } ``` 请将 `YOUR_RSA_PUBLIC_KEY` 替换为你的RSA公钥,将 `YOUR_RSA_PRIVATE_KEY` 替换为你的RSA私钥。在前端,你可以使用axios或其他HTTP库发送POST请求到后端的 `/api/decrypt` 路径,并将加密后的数据作为请求体的 `encryptedData` 字段传递。后端将解密后的数据作为响应返回给前端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值