angular jsencrypt rsa 加解密和使用注意点

描述:后端生成公钥对,给前端公钥,保留私钥,给前端的公钥加密用,后端保留的私钥解密用

1.java服务端生成公钥对,公钥给前端用作加密,私钥保留在后端用作解密,我生成的是1024位的公钥

2.加密最大的明文长度是117,解密最大长度是128,超长的话需要分段加解密,分段就是循环加解密,加密每个循环加密117字节,解密每个循环解密128个字节,117和128是根据1024得到的,网上很多说明

2.给前端的公钥需要先base64 编码且加上公钥头和尾如下
String publicKey
publicKey.add("-----BEGIN PUBLIC KEY-----\n");
publicKey.add(new String(Base64.encodeBase64((RSAPublicKey类型公钥).getEncoded())));    
publicKey.add("\n-----END PUBLIC KEY-----");
jsencrypt 按照例程写就行

3.jsencrypt 使用:
npm install jsencrypt
import {JSEncrypt} from 'jsencrypt';
公钥加密js代码:
  encrypt(str: String): any{
    var jse = new JSEncrypt({default_key_size:1024});
    jse.setPublicKey(java服务器传过来的公钥串);
    var encrypted = jse.encrypt(str);
    return encrypted;
  }

注意:java默认的解密填充方式是pkcs1解密的时候不用改默认就行

注意:jsencrypt 加密后的内容是经过base64编码的,所以服务器解密的时候先base64解码并且注意前端传过来的String和byte[]类型之间的转换

java解密代码:

我这个解码程序也是根据网友博客略加改动,出处我忘记哪里了,如有问题请联系我及时删博

    public String decryptByPrivate(String content) {
        String decode = "";
        cipher = Cipher.getInstance(ALGORITHM_RSA);
        cipher.init(Cipher.DECRYPT_MODE, privateKey);//privateKey是RSAPrivateKey类型,即公钥对代码中的私钥
        byte[] contentBytes = Base64.decodeBase64(content);
        int splitLength = privateKey.getModulus().bitLength() / 8;//计算解密的最大长度
        byte[][] arrays = splitBytes(contentBytes, splitLength);
        StringBuffer stringBuffer = new StringBuffer();
        for (byte[] array : arrays) {
            stringBuffer.append(new String(cipher.doFinal(array)));
        }
        decode = stringBuffer.toString();
        log.info("decryptCode : "+decode);
        return decode;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值