【密码学】RSA加密 kotlin实现方法(支持任意字节长度)
这个编辑器不支持kotlin,尴尬了····
算了,就用Java来弄吧
val 定义常量
var 定义变量
具体kotlin的开发手册详见:http://www.runoob.com/kotlin/kotlin-tutorial.html
真的不想用Miracl这个库···而且只支持c
但是用kotlin(其实是java中自带的security库)真的超级方便!!!!
看代码就知道了:(如果要是c++我得写多少啊···/笑哭)
(代码高亮不符合,请以IDEA为准)
import com.sun.org.apache.xml.internal.security.utils.Base64.encode
import java.io.ByteArrayOutputStream
import java.security.KeyPairGenerator
import java.security.PrivateKey
import java.security.PublicKey
import javax.crypto.Cipher /*
RSA的加密解密实现
2018.12.4
*/
object RSA加密{
/*
私钥加密
Input是原文
publicKey是私钥
*/
val ENCRYPT_MAX_SIZE=117
fun encryptByPubicKey(input:String, publicKey: PublicKey):String
{
var byteArray=input.toByteArray() //把Input内容取出来
var temp:ByteArray?=null
var offset:Int=0 //当前偏移位置
//1.创建cipher对象
val cipher=Cipher.getInstance("RSA")//选择RSA加密解密
//2.初始化cipher
cipher.init(Cipher.ENCRYPT_MODE,publicKey)//加密模式
//加密 分段进行
var os=ByteArrayOutputStream()
while(byteArray.size-offset>0)
{
//每次加密最大117字节
if(byteArray.size-offset>= ENCRYPT_MAX_SIZE)//剩余部分大于最大加密长度则进行完整一次加密操作
{
temp= cipher.doFinal(byteArray,offset, ENCRYPT_MAX_SIZE)
//重新计算偏移的位置
offset+= ENCRYPT_MAX_SIZE
}
else
{
temp= cipher.doFinal(byteArray,offset, byteArray.size-offset)
offset=byteArray.size
}
//存储到临时缓冲区
//加密最后一块剩下来的
os.write(temp)
}
os.close()
return com.sun.org.apache.xml.internal.security.utils.Base64.encode(os.toByteArray())
} } fun main(args: Array<String>) {
//如何生成密钥对
val input="突然想坐火车了,一定要靠在窗边,这样便可以避开旁人奇怪的东张西望的眼神,一定要带上耳机,这样就听不到车厢里琐碎的声音。我知道火车要开向何方,也知道何时到达,很重要很幸福的一件事就是,在到达之前的那段时间我是自由的。尽管车厢里没有风,但看着窗外的我似乎触到了外面田野上的清风。"
val generator=KeyPairGenerator.getInstance("RSA") //密钥对生成器
val keyPair=generator.genKeyPair() //生成密钥对
val publicKey=keyPair.public //生成公钥
val privateKey=keyPair.private //生成私钥
//println("公钥:"+encode(publicKey.encoded))
//println("私钥:"+ encode(privateKey.encoded))
/*********************非对称加密三部曲****************************/
//1.创建cipher对象
//val cipher=Cipher.getInstance("RSA")//选择RSA加密解密
//2.初始化cipher
//val key: Key?=null //创建密钥
//cipher.init(Cipher.ENCRYPT_MODE,key)//加密模式
//加密/解密
println("原文:"+input)
println("RSA公钥加密后:"+RSA加密.encryptByPubicKey(input,publicKey)) }
执行结果:
这里用了BASE64编码,要不然全是乱码哈哈哈
原文:突然想坐火车了,一定要靠在窗边,这样便可以避开旁人奇怪的东张西望的眼神,一定要带上耳机,这样就听不到车厢里琐碎的声音。
我知道火车要开向何方,也知道何时到达,很重要很幸福的一件事就是,在到达之前的那段时间我是自由的。
尽管车厢里没有风,但看着窗外的我似乎触到了外面田野上的清风。
RSA公钥加密后:
C4Q6gJRidH3dwAsNA9vCeH7uqKfd3k05fHbGT4To0Uyyvdm2MYImcyueAwAqDd4aKpVRa+tfrIcA
P3lCmT8h1zscSbJzWML3zqBkq1VcCSKtcv/Vb/pgFR5AYAgo9tA/eoqn2mJi/gHPu4WGDHiiljI8
eH1Tj7wdfT0LNlmUfqTpNjHfer/Ebxr62VKQOQrLhHrI9iwYu7427YSidRwcx8+cuOTaQZrZzs6W
BR2G1kK6XlaGdeB/tfMUvu9l2COQ3DfamgbiiqulKwmpkdDfpvhycVdKTjLuo29hezeAx05MmkT3
iyjiOBk6S5KWq8HgNludlqRC9iuCM7R5m1xca2MhjRUUMUVQAchxiBu3GXrEOoJJZq2bpo4v1XOk
q9a8+IlRgCcEIP9fBd8f5dCqF//QI5/u0Np9TL4qX5TOgXOHX8f4iL9PRY13hUQ9I8mcHM/BewHu
S5oR4nijxYKlkANYWzWXshTU8wLyOIRpIc25gSHzt0iDwf6/bCXIJr1YdFQXodyBelRVcNwqWsZk
oi267JZvop+Mmm7fOuAJMzrxsRDM0jYPvIhcPc9E7DWXQeY9fCTXVNQgLIjPh0gHHqRwQjvS+AQ0
0FagVwxTBKlXYmvnAEetuXgpJv9Q+9R8QXsKbLAv+TSZvKNkh69WGbb4RW4UclsJiMHrvAJR2+lh
nCdsCJGSfcfXmKoK5ZDZTdNoZM4E8mxcOownPwsPJUWiX9JR3iNL0tzm137yqnA1dZPwEiUKwX9S
XB3ODSrAjV/ARHdRF/jgAQbN8VUdUg4OPPleoOvFR9D2fIBZrVOsBirkcBrawCsZUbFc/Oh3OONR
SXHJhgWo2AeM1CQqUBqZyMfCLKZXfu8bmlbhwJfr+Nsx0ChNF8KmTCtvehejiMrAgu9HMFUf7DYT
LV5JVJptUq4qEfj94JSNufIRWi2yEBwfgV1HV1eWIrBJXkl9l8bKviIjdmKtLaxmQLVO3EXBuncl
Fgcv2CcoB4SXmSfbwHSM0wgwCpR8WG9dF5uKcEHIHkqnJiogT6ikr4y2tSadNJ9BKPuanlqtRvVw
fDxySWY57OoMrtqGDBM+nex1JkAdKo3Z7a7ALOZp/7AohH0B7nP/sE68upNFYO2wQNIMy/KBcxb5
VXyb5VK+dhlgSL2YMlLeOy06dPf5tClhoZijPgfw4svyOc9kIW8763tPHQsZMw21agg1jAtbvRml
m+nh5n0modCrdghguIkxCXW0dmrW0WnrXK67q2sKU+UUqkoo32Vyz9gdj8YwN+sisYzsEamIwUt6
L3XwjB7LgHa97dMhVBJMuNwogn/fy9HY4ZQf1xX2XVDloL98LXdsXRo/ZYHzaVRUuF4+RV2pwg==
(什么鬼玩意···加密真可怕)
明天把椭圆曲线加密写出来
【密码学】RSA加密 kotlin实现方法(支持任意字节长度)的更多相关文章
- vue使用JSEncrypt实现rsa加密及挂载方法
挂载全局方法 使用jsencrypt进行rsa加密 原文链接:Js参数RSA加密传输,jsencrypt.js的使用 - CSDN博客* https://blog.csdn.net/p31201115 ...
- 如何在ASP.Net中实现RSA加密
在我们实际运用中,加密是保证数据安全的重要手段.以前使用ASP时,对数据加密可以使用MD5和SHA1算法,这两种算法虽然快捷有效,但是无法对通过它们加密的密文进行反运算,即是解密.因此需要解密数据的场 ...
- RSA 加密解密使用实例
http://www.dtmao.cc/news_show_692109.shtml 本文不讨论RSA加密解密本身,只记录使用方法及遇到的坑,RSA原理及注意事项可在网上查找. 背景:公司的一个需求, ...
- C#的RSA加密解密签名,就为了支持PEM PKCS#8格式密钥对的导入导出
差点造了一整个轮子 .Net Framework 4.5 里面的RSA功能,并未提供简单对PEM密钥格式的支持(.Net Core有咩?),差点(还远着)造了一整个轮子,就为了支持PEM PKCS#8 ...
- 用cryptico.js实现RSA加密(应对cryptico不支持PEM)
问题: 随手分享一下好了,这个问题困扰了很久. cryptico.js这个加密算法库很全,很适合在前端用到各种加密解密算法的需求.但是美中不足的是,它的RSA加密不支持PEM格式,所以如果你后端用ja ...
- C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法
因为C#的RSA加密解密只有公钥加密,私钥解密,没有私钥加密,公钥解密.在网上查了很久也没有很好的实现.BouncyCastle的文档少之又少.很多人可能会说,C#也是可以的,通过Biginteger ...
- RSA加密、解密、签名、验签的原理及方法
一.RSA加密简介 RSA加密是一种非对称加密.可以在不直接传递密钥的情况下,完成解密.这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险.是由一对密钥来进行加解密的过程,分别称为公钥和私 ...
- 电信级的RSA加密后的密码的破解方法
一直以来,电信通过HTTP劫持推送广告的方式已经存在了很多年了,这种手段至今并未停止.这种手段月光博客曾经有多次曝光,见<电信级的网络弹出广告>.<获取了电信恶意弹出广告的罪证> ...
- ruby的加密方法整理(des rsa加密 加签)
# coding:utf-8require 'openssl'require 'base64'#des加密并且base64编码def des_encrypt des_key, des_text des ...
随机推荐
- 启动spring boot项目
启动spring boot项目 pom.xml如下: <?xml version="1.0" encoding="UTF-8"?> <proj ...
- jQuery和CSS3炫酷button点击波特效
这是一款效果很炫酷的jQuery和CSS3炫酷button点击波特效.该特效当用户在菜单button上点击的时候.从鼠标点击的点開始,会有一道光波以改点为原点向外辐射的动画效果,很绚丽. 在线演示:h ...
- hdu1068 Girls and Boys --- 最大独立集
有一个集合男和一个集合女,给出两集合间一些一一相应关系.问该两集合中的最大独立集的点数. 最大独立集=顶点总数-最大匹配数 此题中.若(a,b)有关.则(b,a)有关.每个关系算了两次,相当于二分图的 ...
- Cocos2d-X开发中国象棋《三》開始场景的实现
在前面两节(第一节.第二节)中介绍了中国象棋的功能和project文件.在这篇博客中将介绍中国象棋的開始场景的实现 在写代码前先理清一下实现開始场景的思路: 1.打开游戏后进入開始场景,场景上显示一个 ...
- Angularjs+Bootstrap实现分页指令
本插件的开发目的主要给前端同学使用,本人是专注于后台开发的,对css样式不熟悉,但逼于前端要求做一个共公组件方便日常开发,所以这个插件在样式上可能不适合大部分人,喜欢的拿走吧,不喜欢的也请别喷. 一 ...
- bzoj2935 [Poi1999]原始生物——欧拉回路
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2935 考察欧拉回路性质的题目呢: TJ:https://blog.csdn.net/u014 ...
- 快速搭建ELK集中化日志管理平台
由于我们的项目是分布式,服务分布于多个服务器上,每次查看日志都要登录不同服务器查看,而且查看起来还比较麻烦,老大让搭一个集中化日志管理的东西,然后就在网上找到了这个东西ELK ELK就是elastic ...
- DotNetCasClient加载失败问题分析
最近公司在接入整理单点登录方案的时候,选择了CAS方案,实际版本采用了4.0.当我们把服务端附属完毕,基于.NET平台Web版的客户端DotNetCasClient进行定制化修改后,在测试环境通过.然 ...
- Elasticsearch之批量操作bulk
1.bulk相当于数据库里的bash操作. 2.引入批量操作bulk,提高工作效率,你想啊,一批一批添加与一条一条添加,谁快? 3.bulk API可以帮助我们同时执行多个请求 4.bulk的格式: ...
- RFC1867 HTTP file upload
RFC1867 HTTP file upload RFC1867 is the standard definition of that "Browse..." button tha ...