美文网首页already收藏
RSA非对称加密解密工具类

RSA非对称加密解密工具类

作者: Anson_1f2a | 来源:发表于2022-02-04 17:52 被阅读0次

背景:

使用公钥加密数据,然后使用私钥解密。网上找的现成的java方法,然后转成kotlin。

import org.apache.commons.codec.binary.Base64
import java.security.KeyFactory
import java.security.KeyPairGenerator
import java.security.PrivateKey
import java.security.PublicKey
import java.security.interfaces.RSAPrivateKey
import java.security.interfaces.RSAPublicKey
import java.security.spec.PKCS8EncodedKeySpec
import java.security.spec.X509EncodedKeySpec
import java.time.LocalDate
import javax.crypto.Cipher

/**
 * @Author: anson
 * @Date: 2022/2/4 4:02 PM
 */
object RSAUtils {

    /**
     * 公钥加密私钥解密
     */
    fun test1(keyPair: RSAKeyPair, source: String) {
        println("***************** 公钥加密私钥解密开始 *****************")
        println("加密前:$source")
        val text1 = encryptByPublicKey(keyPair.publicKey, source)
        println("加密后:$text1")
        val text2 = decryptByPrivateKey(keyPair.privateKey, text1)
        println("解密后:$text2")
        if (source == text2) {
            println("解密字符串和原始字符串一致,解密成功")
        } else {
            println("解密字符串和原始字符串不一致,解密失败")
        }
        println("***************** 公钥加密私钥解密结束 *****************")
    }

    /**
     * 私钥加密公钥解密
     *
     * @throws Exception
     */
    fun test2(keyPair: RSAKeyPair, source: String) {
        println("***************** 私钥加密公钥解密开始 *****************")
        val text1 = encryptByPrivateKey(keyPair.privateKey, source)
        val text2 = decryptByPublicKey(keyPair.publicKey, text1)
        println("加密前:$source")
        println("加密后:$text1")
        println("解密后:$text2")
        if (source == text2) {
            println("解密字符串和原始字符串一致,解密成功")
        } else {
            println("解密字符串和原始字符串不一致,解密失败")
        }
        println("***************** 私钥加密公钥解密结束 *****************")
    }

    /**
     * 公钥解密
     *
     * @param publicKeyText
     * @param text
     * @return
     */
    fun decryptByPublicKey(publicKeyText: String, text: String): String {
        val x509EncodedKeySpec = X509EncodedKeySpec(Base64.decodeBase64(publicKeyText))
        val keyFactory: KeyFactory = KeyFactory.getInstance("RSA")
        val publicKey: PublicKey = keyFactory.generatePublic(x509EncodedKeySpec)
        val cipher: Cipher = Cipher.getInstance("RSA")
        cipher.init(Cipher.DECRYPT_MODE, publicKey)
        val result: ByteArray = cipher.doFinal(Base64.decodeBase64(text))
        return String(result)
    }

    /**
     * 私钥加密
     *
     * @param privateKeyText
     * @param text
     */
    fun encryptByPrivateKey(privateKeyText: String, text: String): String {
        val pkcs8EncodedKeySpec = PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyText))
        val keyFactory: KeyFactory = KeyFactory.getInstance("RSA")
        val privateKey: PrivateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec)
        val cipher: Cipher = Cipher.getInstance("RSA")
        cipher.init(Cipher.ENCRYPT_MODE, privateKey)
        val result: ByteArray = cipher.doFinal(text.toByteArray())
        return Base64.encodeBase64String(result)
    }

    /**
     * 私钥解密
     *
     * @param privateKeyText
     * @param text
     * @return
     * @throws Exception
     */
    fun decryptByPrivateKey(privateKeyText: String, text: String): String {
        val pkcs8EncodedKeySpec5 = PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyText))
        val keyFactory: KeyFactory = KeyFactory.getInstance("RSA")
        val privateKey: PrivateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5)
        val cipher: Cipher = Cipher.getInstance("RSA")
        cipher.init(Cipher.DECRYPT_MODE, privateKey)
        val result: ByteArray = cipher.doFinal(Base64.decodeBase64(text))
        return String(result)
    }

    /**
     * 公钥加密
     *
     * @param publicKeyText
     * @param text
     * @return
     */
    fun encryptByPublicKey(publicKeyText: String, text: String): String {
        val x509EncodedKeySpec2 = X509EncodedKeySpec(Base64.decodeBase64(publicKeyText))
        val keyFactory: KeyFactory = KeyFactory.getInstance("RSA")
        val publicKey: PublicKey = keyFactory.generatePublic(x509EncodedKeySpec2)
        val cipher: Cipher = Cipher.getInstance("RSA")
        cipher.init(Cipher.ENCRYPT_MODE, publicKey)
        val result: ByteArray = cipher.doFinal(text.toByteArray())
        return Base64.encodeBase64String(result)
    }

    /**
     * 构建RSA密钥对
     *
     */
    fun generateKeyPair(): RSAKeyPair {
        val keyPairGenerator = KeyPairGenerator.getInstance("RSA")
        keyPairGenerator.initialize(512)
        val keyPair = keyPairGenerator.generateKeyPair()
        val rsaPublicKey = keyPair.public as RSAPublicKey
        val rsaPrivateKey = keyPair.private as RSAPrivateKey
        val publicKeyString: String = Base64.encodeBase64String(rsaPublicKey.encoded)
        val privateKeyString: String = Base64.encodeBase64String(rsaPrivateKey.encoded)
        return RSAKeyPair(publicKeyString, privateKeyString)
    }

    /**
     * RSA密钥对对象
     */
    data class RSAKeyPair(val publicKey: String, val privateKey: String)

}

相关文章

  • kotlin版本RSA非对称加密解密与分段加密解密

    基于kotlin语言的RSA非对称加密解密与分段加密解密 RSA非对称加密 RSA非对称加密的具体算法与来源我就不...

  • RSA加密

    RSA加密为非对称加密实现 对称加密:加密解密使用同一个算法 非对称加密:加密和解密使用不同算法 rsa加密原理 ...

  • Android RSA加密

    在线根据公钥私钥加密解密网址 Base64工具类 RSA 加密工具类

  • java 加密解密帮助类

    一、MD5帮助类 二、AES加解密工具类 三、RSA加密解密类

  • 数据加密工具类集合

    1.引入依赖 AES加、解密算法工具类 Base64加密解密 工具类 DES工具类 MD5工具类 RSA加、解密算...

  • 72.加密解密(MD5 SHA1 BASE64 RSA)(二)

    rsa非对称加密解密 rsa要稍微复杂一下,因为rsa需要使用openssl ,是目前最流行的 SSL 密码库工具...

  • RSA非对称加密解密工具类

    背景: 使用公钥加密数据,然后使用私钥解密。网上找的现成的java方法,然后转成kotlin。

  • 命令

    文件编译 加密解密 1. 对称加密 DES AES Base64 2. 非对称加密 RSA RSA加密:公钥加密,...

  • RSA加解密学习笔记

    RSA加解密简单说明: RSA是非对称加密方式,就是说加密解密不是同一个Key。私钥加密公钥解密,待加密的明文字节...

  • ios开发之证书和签名机制(一)

    非对称加密和摘要 1、非对称加密的特性和用法 1) 非对称加密算法(RSA):非对称加密算法指加密秘钥和解密秘钥是...

网友评论

    本文标题:RSA非对称加密解密工具类

    本文链接:https://www.haomeiwen.com/subject/lruskrtx.html