当前位置: 首页 > news >正文

autojs RSA加密(使用public.pem、private.pem)

1.在电脑上生成公钥和私钥

# 一次性
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout -out public.pem

2.把公钥和私钥复制到手机/sdcard/ 目录下

function base64Bytes(bytes) {return android.util.Base64.encodeToString(bytes, android.util.Base64.NO_WRAP);
}
// 工具:PEM → Key
function pemToKey(pem, type) {const factory = java.security.KeyFactory.getInstance("RSA");const clean   = pem.replace(/-----[^-]+-----|\s/g, ""); // 去掉头尾和换行const der     = android.util.Base64.decode(clean, 0);const spec = type === "public"? new java.security.spec.X509EncodedKeySpec(der)   // ← 公钥: new java.security.spec.PKCS8EncodedKeySpec(der); // ← 私钥return type === "public"? factory.generatePublic(spec): factory.generatePrivate(spec);
}// 使用
const pubKey ={toKeySpec:function(){return pemToKey(files.read("/sdcard/public.pem"), "public");}} 
const priKey ={toKeySpec:function(){return pemToKey(files.read("/sdcard/private.pem"), "private");}}// let message =files.readBytes("/sdcard/res1.jpg") ;
// 加密 / 解密测试
const cipher = $crypto.encrypt(JSON.stringify({code:21,data:"test"}), pubKey, "RSA",{output: "base64"});
log(cipher)
const plain  = $crypto.decrypt(cipher, priKey, "RSA", {input:"base64",output: "string"});
console.log(plain);

3.与php对接

 public function testjiami(Request $request){// $key = openssl_pkey_get_private("/www/wwwroot/nbcolorvision.com/storage/keys/private.pem");$password   = $request->input('password');$privateKey = openssl_pkey_get_private(file_get_contents('/www/wwwroot/nbcolorvision.com/storage/keys/private.pem'));$publicKey  = file_get_contents('/www/wwwroot/nbcolorvision.com/storage/keys/public.pem');$plain = '{"code":21,"data":"test","fdgdfg":"dsaadfdasfasfasf","dsadasdas":"sdfsaddasdasd"}';$plain = str_pad($plain, 256, "a");openssl_private_encrypt($plain, $cipherRaw, $privateKey,OPENSSL_NO_PADDING);      // 加密$cipherBase64 = base64_encode($cipherRaw);                   // base64openssl_private_decrypt(base64_decode($password), $decrypted, $privateKey,OPENSSL_NO_PADDING);$decrypted = rtrim($decrypted, "\0");$decrypted = ltrim($decrypted, "\0");// $plain = rtrim($plain, "\0");$plain = preg_replace('/a+$/', '', $plain);return['plain'         => $plain,'cipherBase64'  => $cipherBase64,'decrypted'     => $decrypted,] ;}
http://www.xdnf.cn/news/1386109.html

相关文章:

  • IAR工程如何生成compile_commands.json文件(能生成但是clangd不能生成“.cache文件”)
  • 水质溶解氧检测仪:用于测量水体中溶解氧浓度的专业设备
  • Partner 类开发:会议参与者可视化控件
  • Excel Word Pdf 格式转换
  • 深入解析Qt节点编辑器框架:高级特性与性能优化(四)
  • Kafka 副本同步异常与 ISR 收缩故障排查实录
  • 自动化Reddit 效率已ready
  • Linux(0)|梦开始的地方:xshell下载
  • 表达式语言EL
  • Java全栈工程师的实战面试:从基础到微服务架构
  • More Effective C++ 条款16:牢记80-20准则(Remember the 80-20 Rule)
  • 对于01背包的一些疑问
  • 第十三章项目资源管理--13.8 控制资源
  • 数学七夕花礼(MATLAB版)
  • 嵌入式学习日志————MPU6050简介
  • 【微信小程序】微信小程序基于双token的API请求封装与无感刷新实现方案
  • Unity、Unreal Engine与Godot中纹理元数据管理的比较分析
  • uni-app + Vue3 开发H5 页面播放海康ws(Websocket协议)的视频流
  • 腾讯位置商业授权微信小程序距离计算
  • 有鹿机器人:用智能清洁重塑多行业工作方式
  • AI推介-大语言模型LLMs论文速览(arXiv方向):2025.04.25-2025.04.30
  • ADO 操作access
  • 选华为实验工具:eNSP Pro 和社区在线实验哪个更适合?
  • 《华为战略管理法:DSTE 实战体系》读书笔记
  • 第二章 Vue + Three.js 实现鼠标拖拽旋转 3D 立方体交互实践
  • FDTD_mie散射_项目研究(1)
  • DirectX修复工具官方中文增强版下载!下载安装教程(附安装包),0xc000007b错误解决办法
  • 【python+requests】接口自动化测试:三步用代理工具快速定位问题
  • Linux 软件编程(十四)网络编程:数据存储与 SQLite 数据库
  • 【C++】类与对象(上)