当前位置: 首页 > 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.dtcms.com/a/356432.html

相关文章:

  • 【拍摄学习记录】03-曝光
  • Lora与QLora
  • 创维E910V10C_晶晨S905L2和S905L3芯片_线刷固件包
  • SpringMVC相关梳理
  • 第三方软件测试:【深度解析SQL注入攻击原理和防御原理】
  • [Mysql数据库] 知识点总结6
  • 《Linux 网络编程六:数据存储与SQLite应用指南》
  • LabVIEW转速仪校准系统
  • uniapp跨平台开发---uni.request返回int数字过长精度丢失
  • uni-app + Vue3 开发H5 页面播放海康ws(Websocket协议)的视频流
  • 学习:uniapp全栈微信小程序vue3后台(6)
  • Uniapp + UView + FastAdmin 性格测试小程序方案
  • 2025最新uni-app横屏适配方案:微信小程序全平台兼容实战
  • 项目一系列-第9章 集成AI千帆大模型
  • 实现自己的AI视频监控系统-第二章-AI分析模块5(重点)
  • js AbortController 实现中断接口请求
  • 【MFC教程】C++基础:01 小黑框跑起来
  • 【MFC应用创建后核心文件详解】项目名.cpp、项目名.h、项目名Dlg.cpp 和 项目名Dlg.h 的区别与作用
  • Java项目打包成EXE全攻略
  • Kafka 副本同步异常与 ISR 收缩故障排查实录
  • C语言————操作符详解
  • 《华为战略管理法:DSTE 实战体系》读书笔记
  • 【完整源码+数据集+部署教程】骨折检测系统源码和数据集:改进yolo11-EfficientHead
  • 【微信小程序】微信小程序基于双token的API请求封装与无感刷新实现方案
  • 华为无线AC主备配置案例
  • KNN算法详解:鸢尾花识别和手写数字识别
  • mysql安全运维之常见攻击类型与防御指南-从SQL注入到权限提升
  • .Net应用程序和SqlServer数据库使用tls加密会话过程
  • DMZ层Nginx TLS 终止与安全接入配置实战20250829
  • C5仅支持20MHZ带宽,如果路由器5Gwifi处于40MHZ带宽信道时,会出现配网失败