java mjd_RSA加密Java/Kotlin

我一直试图用一个预先准备好的公钥在Kotlin/Java中加密一个简单的字符串,但是没有成功。

val toEncrypt = "8uUrfe4OcJVUT5lkAP07WKrlGhIlAAwTRwAksBztVaa0hHdZp50EFjOmhrAmFsLQ"

val publicKeyRaw =

"-----BEGIN PUBLIC KEY-----\n" +

"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCAW4WQxF2/qzqYwoQlwkkQIjQJ\n" +

"hCm2Hjl00QGkxeO12Py+jytTNYAopHCPpR4SbhE1cFdYx1qjEnFbgeJBxFENyqDg\n" +

"GvBhlwrWQXfI9LdA2M3xbr/4wur7ph1c+aQxOpImzslCtHJ5df7cyFrOTnkY+XYY\n" +

"yGK2Fsnu67FKWjgVvQIDAQAB\n" +

"-----END PUBLIC KEY-----"

val reader = PemReader(StringReader(publicKeyRaw))

val pemObject = reader.readPemObject()

val keyBytes: ByteArray = pemObject.content

val keySpec: EncodedKeySpec = X509EncodedKeySpec(keyBytes)

val keyFactory = KeyFactory.getInstance("RSA")

val key = keyFactory.generatePublic(keySpec)

val cipher = Cipher.getInstance("RSA")

cipher.init(Cipher.ENCRYPT_MODE, key)

val cipherData: ByteArray = cipher.doFinal(toEncrypt.toByteArray())

val encryptedData = Base64.encodeToString(cipherData, Base64.DEFAULT)

Log.e("TAG", "encryptedData: $encryptedData")

下面是我已经尝试过的代码:

/*

val publicKey = publicKeyRaw.replace("\n", "")

.replace("\\n", "")

.replace("-----BEGIN PUBLIC KEY-----", "")

.replace("-----END PUBLIC KEY-----", "")

*/

/*

val pemParser = PEMParser(StringReader(publicKeyRaw))

val pemKeyPair : PEMKeyPair = pemParser.readObject() as PEMKeyPair

val key = JcaPEMKeyConverter().getPublicKey(pemKeyPair.publicKeyInfo)

*/

/*

val keyFactory = KeyFactory.getInstance("RSA")

val keyBytes: ByteArray = Base64.decode(publicKey.toByteArray(), Base64.DEFAULT)

val spec = X509EncodedKeySpec(keyBytes)

val fileGeneratedPublicKey = keyFactory.generatePublic(spec)

val rsaPub: RSAPublicKey = fileGeneratedPublicKey as RSAPublicKey

val publicKeyModulus: BigInteger = rsaPub.modulus

val publicKeyExponent: BigInteger = rsaPub.publicExponent

val keyFactoryAlt = KeyFactory.getInstance("RSA")

val pubKeySpec = RSAPublicKeySpec(publicKeyModulus, publicKeyExponent)

val key = keyFactoryAlt.generatePublic(pubKeySpec) as RSAPublicKey

*/

/*

val reader = PemReader(StringReader(publicKeyRaw))

val pemObject = reader.readPemObject()

val keyBytes: ByteArray = pemObject.content

val keySpec: EncodedKeySpec = X509EncodedKeySpec(keyBytes)

val keyFactory = KeyFactory.getInstance("RSA")

val key = keyFactory.generatePublic(keySpec)

*/

/*

val keyFactory = KeyFactory.getInstance("RSA")

val keyBytes: ByteArray = Base64.decode(publicKey.toByteArray(), Base64.DEFAULT)

val spec = X509EncodedKeySpec(keyBytes)

val fileGeneratedPublicKey = keyFactory.generatePublic(spec)

val rsaPub: RSAPublicKey = fileGeneratedPublicKey as RSAPublicKey

val publicKeyModulus: BigInteger = rsaPub.modulus

val publicKeyExponent: BigInteger = rsaPub.publicExponent

*/

/*

val pemParser = PEMParser(StringReader(publicKey))

val pemKeyPair : PEMKeyPair = pemParser.readObject() as PEMKeyPair

val encoded : ByteArray = pemKeyPair.publicKeyInfo.encoded

val keyFactory = KeyFactory.getInstance("RSA")

val key = keyFactory.generatePublic(PKCS8EncodedKeySpec(encoded))

*/

https://8gwifi.org/rsafunctions.jsp

它显示了一个错误,它是无效的,甚至很难我在那里生成了1024个密钥大小的密钥

AzfX5.png

我的问题是:如何在Java/Kotlin中使用这种密钥。(您可以在您喜欢的任何站点或提供的站点上生成此类密钥)

-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCAW4WQxF2/qzqYwoQlwkkQIjQJ

hCm2Hjl00QGkxeO12Py+jytTNYAopHCPpR4SbhE1cFdYx1qjEnFbgeJBxFENyqDg

GvBhlwrWQXfI9LdA2M3xbr/4wur7ph1c+aQxOpImzslCtHJ5df7cyFrOTnkY+XYY

yGK2Fsnu67FKWjgVvQIDAQAB

-----END PUBLIC KEY-----

-----BEGIN RSA PRIVATE KEY-----

MIICXAIBAAKBgQCAW4WQxF2/qzqYwoQlwkkQIjQJhCm2Hjl00QGkxeO12Py+jytT

NYAopHCPpR4SbhE1cFdYx1qjEnFbgeJBxFENyqDgGvBhlwrWQXfI9LdA2M3xbr/4

wur7ph1c+aQxOpImzslCtHJ5df7cyFrOTnkY+XYYyGK2Fsnu67FKWjgVvQIDAQAB

AoGActBq8wmTSiVh7s7f4d6d+D6ACZscrHjwsBtcuwUAIOONgO8TtASBNNmSjgsG

kTm/TuvEVfdMjd2rZE0UE/wE+2BOoHTlkVjcKMxoM8KbP/4RBDYlYmWTseiS8zmp

dGwchOzsoWKnhZtnvMrki0f1SdMq4J6g9RncFIrUSKWJ1MECQQDp0s4v+sKo423X

2YSAhB8j1LMPoRlioXSmvVrHGINzGoHt2tRvGqqHaHbd/9QkkhpfeeBcdrv/xOaH

fVH08dnJAkEAjIgFRe6QEDNvm1qCRx6ata047N188MxdHgKHwQBsv48dxqljQrFS

N1yEfXsv6PjLk3DCD8Wi3FTOgftpZVeWVQJBAIpc+TABJkGEW1KYX8Ug6cBtNAxy

my/3NK0abeZUxixNqkcS8BRS5kg8c+KIaYO+hSasWyy8AiGm5XeVm/LjTqkCQEGQ

dGVcF/p3BOsGHyHvNV7tolFgRJpTvl3x8EQrXpFAxDObc6P59tG9aFLi1kdrTA9N

3DxfiMwjBPW/xjxx0MECQBtaSSfTNUYBP64+evjY4HaV9GI5AK83webyF73axXIq

4dyadIdIo78Yaz+f2myX7vyfUlU5iM8QuPMN2KCM3CE=

-----END RSA PRIVATE KEY-----

NO_WRAP: c6nQMEFIrOWsPjB6W00DC6+5xaKm8R79bu8xLz9+yYhDTDepkiQGh0fWpyJuldNJit5CyL9n73TQxMjmtqsZsR/sAGEFjk7EGj8etwFO4MKpZY55BX1MsOVbWbfo2x31uCb/Ssd6nJnu897yCD5Md7xKqbovZP8eoZrvp2azFOk=

DEFAULT:

c6nQMEFIrOWsPjB6W00DC6+5xaKm8R79bu8xLz9+yYhDTDepkiQGh0fWpyJuldNJit5CyL9n73TQ

xMjmtqsZsR/sAGEFjk7EGj8etwFO4MKpZY55BX1MsOVbWbfo2x31uCb/Ssd6nJnu897yCD5Md7xK

qbovZP8eoZrvp2azFOk=

在MATLAB中,可以使用以下函数将MJD转换为UTC时间: ```matlab function utc_time = mjd2utc(mjd_time) % Convert Modified Julian Date (MJD) to UTC time % Input: MJD time, in units of days since 1858-11-17 00:00:00 UTC % Output: UTC time, in MATLAB datenum format % Reference: https://en.wikipedia.org/wiki/Julian_day#MJD % Define constants mjd_epoch = 2400000.5; % MJD epoch (JD 1858.5) sec_per_day = 86400; % Number of seconds in a day % Convert MJD to Julian Day (JD) jd_time = mjd_time + mjd_epoch; % Convert JD to UTC time utc_time = (jd_time - 2440587.5) * sec_per_day / 86400 + datenum('1970-01-01 00:00:00'); end ``` 其中,输入参数`mjd_time`表示以天为单位的自1858年11月17日00:00:00 UTC起的时间差,输出参数`utc_time`是以MATLAB datenum格式表示的UTC时间。这个函数的实现方法是先将MJD转换为JD,再将JD转换为UTC时间。 以下是将UTC时间转换为MJD的函数: ```matlab function mjd_time = utc2mjd(utc_time) % Convert UTC time to Modified Julian Date (MJD) % Input: UTC time, in MATLAB datenum format % Output: MJD time, in units of days since 1858-11-17 00:00:00 UTC % Reference: https://en.wikipedia.org/wiki/Julian_day#MJD % Define constants mjd_epoch = 2400000.5; % MJD epoch (JD 1858.5) sec_per_day = 86400; % Number of seconds in a day % Convert UTC time to Julian Day (JD) jd_time = (utc_time - datenum('1970-01-01 00:00:00')) * 86400 / sec_per_day + 2440587.5; % Convert JD to MJD mjd_time = jd_time - mjd_epoch; end ``` 该函数的输入参数`utc_time`是以MATLAB datenum格式表示的UTC时间,输出参数`mjd_time`是以天为单位的自1858年11月17日00:00:00 UTC起的时间差。这个函数的实现方法是先将UTC时间转换为JD,再将JD转换为MJD
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值