package com.casic.br.utils import android.util.Base64 import java.security.* import java.security.spec.InvalidKeySpecException import java.security.spec.X509EncodedKeySpec import javax.crypto.BadPaddingException import javax.crypto.Cipher import javax.crypto.IllegalBlockSizeException import javax.crypto.NoSuchPaddingException object RSAUtils { //构建Cipher实例时所传入的的字符串,默认为"RSA/NONE/PKCS1Padding" private fun processData(srcData: ByteArray, key: Key): ByteArray? { //用来保存处理结果 var resultBytes: ByteArray? = null try { //获取Cipher实例 val cipher = Cipher.getInstance("RSA/None/PKCS1Padding") //初始化Cipher,mode指定是加密还是解密,key为公钥或私钥 cipher.init(Cipher.ENCRYPT_MODE, key) //处理数据 resultBytes = cipher.doFinal(srcData) } catch (e: NoSuchAlgorithmException) { e.printStackTrace() } catch (e: NoSuchPaddingException) { e.printStackTrace() } catch (e: InvalidKeyException) { e.printStackTrace() } catch (e: BadPaddingException) { e.printStackTrace() } catch (e: IllegalBlockSizeException) { e.printStackTrace() } return resultBytes } fun encryptDataByPublicKey(srcData: ByteArray, publicKey: PublicKey): String { val resultBytes = processData(srcData, publicKey) return Base64.encodeToString(resultBytes, Base64.DEFAULT) } fun keyStrToPublicKey(publicKeyStr: String?): PublicKey? { var publicKey: PublicKey? = null val keyBytes = Base64.decode(publicKeyStr, Base64.DEFAULT) val keySpec = X509EncodedKeySpec(keyBytes) try { val keyFactory = KeyFactory.getInstance("RSA") publicKey = keyFactory.generatePublic(keySpec) } catch (e: NoSuchAlgorithmException) { e.printStackTrace() } catch (e: InvalidKeySpecException) { e.printStackTrace() } return publicKey } }