这个编辑器不支持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. [RxJS 6] The Catch and Rethrow RxJs Error Handling Strategy and the finalize Operator

    Sometime we want to set a default or fallback value when network request failed. http$ .pipe( map(re ...

  2. poj 1080 Human Gene Functions (最长公共子序列变形)

    题意:有两个代表基因序列的字符串s1和s2,在两个基因序列中通过添加"-"来使得两个序列等长:其中每对基因匹配时会形成题中图片所示匹配值,求所能得到的总的最大匹配值. 题解:这题运 ...

  3. SEO优化之外链的末日来临

    告诉大家一个好消息,以后不用再为外链的事情发愁了.难道是有好的外链工具?不是,而是百度已经取消外链了. 今天在百度上看到一篇文章:"SEO春天来了.百度取消外链".点击进去一看,吓 ...

  4. 使用Memcached改进Java企业级应用性能:架构和设置

    Memcached由Danga Interactive开发.用来提升LiveJournal.com站点性能. Memcached分布式架构支持众多的社交网络应用,Twitter.Facebook还有W ...

  5. easyui+struts2:datagrid无法不能得到数据

    转自:https://bbs.csdn.net/topics/390980437 easyui+struts2:datagrid无法访问到指定action: userlist.jsp部分代码: XML ...

  6. ISLR学习笔记

    目录 C1 Introduction to Statistical Learning 1.1Statistical Learning介绍: 1.1.1 估计 \(f\) 的目的:prediction和 ...

  7. Human Gene Functions(dp)

    http://poj.org/problem?id=1080 #include <stdio.h> #include <stdlib.h> #include <strin ...

  8. 【LuoguP2210 USACO】 Haywire

    这种答案跟序列排列顺序有关的,n比较小的(稍微大一点的也可以),求最优解的,一般都可以随机化过 随机化不一定是模拟退火或是什么遗传蚁群 哪怕只是直接随机化一个序列,只要你随机的次数够多,它都能找到正解 ...

  9. .Net Core 学习(二)上篇

    用Visual Studio和ASP.NET Core MVC创建Web API 1.启动Visual Studio.从文件菜单,选择新建>项目.选择ASP.NET Core Web Appli ...

  10. Spring Cloud (2) 服务消费者-基础

    LoadBalancerClient 使用Spring Cloud提供的负载均衡器客户端来实现服务的消费. 首先创建一个服务消费者工程,命名为com.david.consumer,并在pom.xml中 ...