Android RSA 加密

Android RSA 加密没想到被Android里的RSA加密折腾了几个小时,主要还是自己对RSA加密的原理不了解,然后网上相关的资料也少。使用AndroidUtilCode工具类中的`EncryptUtils.encryptRSA()`加密后的数据怎么也不对,后来自己找了段加密代码,才总算是可以了,这里记录一下。首先我们需要先生成一个RSA的公钥和私钥。

大家好,又见面了,我是你们的朋友全栈君。

没想到被Android里的RSA加密折腾了几个小时,主要还是自己对RSA加密的原理不了解,然后网上相关的资料也少。
使用AndroidUtilCode工具类中的EncryptUtils.encryptRSA()加密后的数据怎么也不对,后来自己找了段加密代码,才总算是可以了,这里记录一下。

首先我们需要先 生成一个RSA的公钥和私钥。

RSA加密公钥

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOCSZxJyD9BCPF+E0AwT1v/qdv
lMhLKkNbnp1BIrh9bnfuv15mULugWq7ARtWtppZVLHu7H0No6vZQRN66BY3wWbll
NPZP2Qg2xV3ubXcDa5CtfdmDbPeN+Ol4s97Gzcn7VL1+3NXzMRLAm1E64hqkrMfE
xpr5Okdai0szIb/EvwIDAQAB
-----END PUBLIC KEY-----

RSA加密私钥

-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM4JJnEnIP0EI8X4
TQDBPW/+p2+UyEsqQ1uenUEiuH1ud+6/XmZQu6BarsBG1a2mllUse7sfQ2jq9lBE
3roFjfBZuWU09k/ZCDbFXe5tdwNrkK192YNs94346Xiz3sbNyftUvX7c1fMxEsCb
UTriGqSsx8TGmvk6R1qLSzMhv8S/AgMBAAECgYAK8Y96KSLmbYbc6BBm/tydi0An
fBabb3Y+cpFVuVtlRi3Wn5GLC7S7krV/fwOwgo2vnno/+SwicYB9yPqvlMXyKtl0
kXlcQn6vj+Qaf1EHy35Be4sEysTvVxW7eaHtrbIbQwc51YVUmbwX5sGnLL8579kK
zcQ15K9hpY+gQ9tw0QJBAOx1dvvkOdGIrzBajpGB3V9Yu0Z4MZrl1AihzCZLgTov
3eAWtmDxa6y8ErYRXkZq8dC+H9mnrBHN53Db6Gl1xfcCQQDfEA17x1A2M45z3suk
GbDbTy/u1K64RqsnubJWBXWzY1RO43cqP7Zul7edNgMdYpOGb6w4Z01i65ACcKDg
K6V5AkB7zymEzMRFZUctj0z0/UV3JhOw20BF9a7m8ijdqE06tVN8gQfvjJkvca5u
bHurbVW+Ub6FjZi4HdLgMhToG0WTAkEAw6Zl3Tq+LTxdZ150ybPK/yFezqH3uiQp
/YcQWAkj6rtl+GflXsZRcoFaiOcWJlEPSqxqp3JcWzZ4ststEFLYKQJBAJqFy7HC
5vLOmAMqPzT1BP70MjrCFvJ80jeTIsIqfpJxxtmYthfjtmaM6UWnfDQhdbZ1bFvB
Ywuc/LNp25PThWc=
-----END PRIVATE KEY-----

然后附上RSA加密相关的代码

fun main(){ 
   
	val idCard = "12345678"
	val result = rsaEncode(idCard)
	Log.i("Z-MMM", "result:$result")
}

fun rsaEncode(str: String): String? { 
   
    val publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOCSZxJyD9BCPF+E0AwT1v/qdv
lMhLKkNbnp1BIrh9bnfuv15mULugWq7ARtWtppZVLHu7H0No6vZQRN66BY3wWbll
NPZP2Qg2xV3ubXcDa5CtfdmDbPeN+Ol4s97Gzcn7VL1+3NXzMRLAm1E64hqkrMfE
xpr5Okdai0szIb/EvwIDAQAB"
   var outStr = ""
    try { 
   
        // base64编码的公钥
        val decoded: ByteArray = Base64.decode(publicKey, Base64.DEFAULT)
        val pubKey = KeyFactory.getInstance("RSA")
            .generatePublic(X509EncodedKeySpec(decoded)) as RSAPublicKey
        // RSA加密
        val cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding")
        cipher.init(Cipher.ENCRYPT_MODE, pubKey)
        outStr = Base64.encodeToString(
            cipher.doFinal(str.toByteArray(charset("UTF-8"))),
            Base64.DEFAULT
        )
    } catch (e: Exception) { 
   
        e.printStackTrace()
    }
    return outStr
}

打印的结果

mAHc2ZtZuzDrA295Aw4CpYhctlJA3NeC7xd0BgGRMVSzBL8WRYuxNiDK1CQXuQ7B/3wgqH72CbRw
    GjUndeZf4jIBm7GHj9xOa6GPbDhlTVeH4VAjSoEgxiRzh/0WW2KLFZjs4GCErjpMx+x1U5EMIExV
    91OfiWcHCp72gns5tRo=

ras每次加密的结果都会变

验证加密结果 : 通过该网站我们可以对其进行解密,可以看到解密后的结果是12345678
在这里插入图片描述

感谢 Android RSA加密(Java后台给出公钥)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145729.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Makefile 语法入门

    Makefile 语法入门一、Makefile简介Makefile是一种常用于编译的脚本语言。它可以更好更方便的管理你的项目的代码编译,节约编译时间(没改动的文件不编译)。注意Makefile文件命令必须是Makefile或者makefile,并使用make命令编译。 二、1个规则1.语法规则目标…:依赖…命令1命令2…2.目标…

    2022年5月1日
    35
  • Windows10下python pip卸载并重新安装

    Windows10下python pip卸载并重新安装pip已经升级到最新版本,但还是会提示我在使用旧版本,所以把pip卸载并重新安装一次,之后就没有再提示升级了卸载pip中间会有一个提示,输入Y即可python-mpipuninstallpip找到python所在的目录,进入到子目录Scripts中,打开cmd,输入以下命令:easy_inatall-Upip这样就会重新安装pip并升级到最新版本。再进行pipinstall时候也不会提示升级了。…

    2022年10月19日
    1
  • Python–csv文件处理建议收藏

    CSV(Comma-SeparatorValues)逗号分割值,由于是纯文本文件,任何编辑器都可以打开。下面用csv和pandas两种方式进行csv文件操作原始csv文件内容1.csv包操作c

    2021年12月18日
    45
  • MySQL EXPLAIN type类型说明[通俗易懂]

    MySQL EXPLAIN type类型说明[通俗易懂]EXPLAIN执行计划中type字段分为以下几种:ALL    INDEX    RANGE    REF    EQ_REF    CONST,SYSTEM    NULL自上而下,性能从最差到最好 type=ALL,全表扫描,MYSQL扫描全表来找到匹配的行(因为film表中rating不是索引)mysql>explainexten…

    2022年10月10日
    2
  • CSP考试总结_考试总结300字

    CSP考试总结_考试总结300字t1模拟很难受,要加大这方面练习,要习惯用草稿理清思路t2和去年一样的东西,也是高精的坑,考前应该补一下高精t3比较正常,这种大数据结构只有考虑暴力,打正解很容易浪费时间并且上头t4无能

    2022年8月6日
    5
  • 打造自己的HelloDrone 无人机APP过程《0》

    打造自己的HelloDrone 无人机APP过程《0》目录文章目录目录摘要1.项目设置1.设置一个基本的AndroidStudio项目2.添加客户端库3.实现TowerListener的监听事件4.初始化ControlTower并绑定activity的生命周期5.实现无人机监听事件6.无人机实例化并在tower上注册摘要本节主要记录开发自己的HelloDrone无人机的过程,本节是第一节欢迎批评指正!参考资料:博客参考dronekit-android源码Tower源码usb-serial-for-android库1.项目设置1.设

    2022年8月15日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号