这个编辑器不支持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实现方法(支持任意字节长度)的更多相关文章

  1. vue使用JSEncrypt实现rsa加密及挂载方法

    挂载全局方法 使用jsencrypt进行rsa加密 原文链接:Js参数RSA加密传输,jsencrypt.js的使用 - CSDN博客* https://blog.csdn.net/p31201115 ...

  2. 如何在ASP.Net中实现RSA加密

    在我们实际运用中,加密是保证数据安全的重要手段.以前使用ASP时,对数据加密可以使用MD5和SHA1算法,这两种算法虽然快捷有效,但是无法对通过它们加密的密文进行反运算,即是解密.因此需要解密数据的场 ...

  3. RSA 加密解密使用实例

    http://www.dtmao.cc/news_show_692109.shtml 本文不讨论RSA加密解密本身,只记录使用方法及遇到的坑,RSA原理及注意事项可在网上查找. 背景:公司的一个需求, ...

  4. C#的RSA加密解密签名,就为了支持PEM PKCS#8格式密钥对的导入导出

    差点造了一整个轮子 .Net Framework 4.5 里面的RSA功能,并未提供简单对PEM密钥格式的支持(.Net Core有咩?),差点(还远着)造了一整个轮子,就为了支持PEM PKCS#8 ...

  5. 用cryptico.js实现RSA加密(应对cryptico不支持PEM)

    问题: 随手分享一下好了,这个问题困扰了很久. cryptico.js这个加密算法库很全,很适合在前端用到各种加密解密算法的需求.但是美中不足的是,它的RSA加密不支持PEM格式,所以如果你后端用ja ...

  6. C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法

    因为C#的RSA加密解密只有公钥加密,私钥解密,没有私钥加密,公钥解密.在网上查了很久也没有很好的实现.BouncyCastle的文档少之又少.很多人可能会说,C#也是可以的,通过Biginteger ...

  7. RSA加密、解密、签名、验签的原理及方法

    一.RSA加密简介 RSA加密是一种非对称加密.可以在不直接传递密钥的情况下,完成解密.这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险.是由一对密钥来进行加解密的过程,分别称为公钥和私 ...

  8. 电信级的RSA加密后的密码的破解方法

    一直以来,电信通过HTTP劫持推送广告的方式已经存在了很多年了,这种手段至今并未停止.这种手段月光博客曾经有多次曝光,见<电信级的网络弹出广告>.<获取了电信恶意弹出广告的罪证> ...

  9. ruby的加密方法整理(des rsa加密 加签)

    # coding:utf-8require 'openssl'require 'base64'#des加密并且base64编码def des_encrypt des_key, des_text des ...

随机推荐

  1. linux c编程訪问数据库

    源代码例如以下: #include <stdio.h> #include <stdlib.h> #include <mysql/mysql.h> int main( ...

  2. compact处理流程分析

    compact处理流程分析 compact的处理与split同样.由client端与flush时检查发起. 针对compact另一个在rs生成时生成的CompactionChecker线程定期去检查是 ...

  3. IOS 京东相关app 出现“网络请求失败,请检查您的网络设置”的解决办法

    问题情况 在IOS系统下,下载安装或者更新新版的京东相关app之后,打开app直接就是“网络请求失败,请检查网络设置”,无论是数据连接还是wifi都试了,都是网络请求失败. 然而打开无线局域网-使用无 ...

  4. public static float CompareExchange(ref float location1,float value,float comparand)

    https://msdn.microsoft.com/en-us/library/k9hz8w9t(v=vs.110).aspx Compares two single-precision float ...

  5. Spring:验证用户登录

    利用 Spring IOC 技术实现用户登录的验证机制,对用户进行登录验证. 首先利用 Spring 的自动装配模式将 User 对象注入到控制器中,然后将用户输入的用户名和密码与系统中限定的合法用户 ...

  6. IntelliJ IDEA :解决idea导入项目爆红

    转:https://my.oschina.net/LevelCoder/blog/1802158 我们在导入一个新的项目到idea的时候,项目明明没有报错,但是会出现出了父包属于正常颜色外,其子包都会 ...

  7. hdu3507Print Article(斜率优化dp)

    Print Article Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)To ...

  8. 浅讲ajax

    1.ajax入门案例 1.1 搭建Web环境 ajax对于各位来说,应该都不陌生,正因为ajax的产生,导致前台页面和服务器之间的数据传输变得非常容易,同时还可以实现页面的局部刷新.通过在后台与服务器 ...

  9. ROS-URDF-物理属性

    前言:介绍向连杆添加碰撞和惯性属性,以及向关节添加动力学. 参考自:http://wiki.ros.org/urdf/Tutorials/Adding%20Physical%20and%20Colli ...

  10. 富文本wangEditor的批量激活

    最近项目中使用了wangEditor这个轻量级的富文本框,由于需求是一个页面中会有多个富文本框同时激活,所以写了个批量激活的jquery方法,分享一下 // 激活富文本框 var wangEditor ...