PHP加解密技术之RSA加解密
在laravel工程app文件夹下新建Tools文件夹,然后新建Rsa.php文件,使用公钥加密私钥解密。

RSA加解密

在laravel工程app文件夹下新建Tools文件夹,新建Rsa.php,如下

源码

<?php
/**
 * Created by PhpStorm.
 * User: and
 * Date: 2017/3/10
 * Time: 13:11
 */
namespace App\Tools;

class Rsa {
    const PRIVATE_KEY = '-----BEGIN PRIVATE KEY-----
PRIVATE_KEY
-----END PRIVATE KEY-----';
    const PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----
PUBLIC_KEY
-----END PUBLIC KEY-----';

    public function index() {
        $pwd = 'abcdefg';
        $password = $this->enRSA_private($pwd);
        echo 'mm =  '.$password;
        echo '<br>';
        $password = $this->deRSA_public($password);
        echo 'mm =  '.$password;
    }

    /*-----------------------------  公钥加密, 私钥解密 --------------------------------------*/
    /*
     * RSA公钥加密
     * 使用私钥解密
     */
    public static function enRSA_public($aString) {
        $pu_key = openssl_pkey_get_public(self::PUBLIC_KEY);//这个函数可用来判断公钥是否是可用的
        openssl_public_encrypt($aString, $encrypted, $pu_key);//公钥加密,私钥解密
        $encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
        return $encrypted;
    }
    /*
     * RSA私钥解密
     * 有可能传过来的aString是经过base64加密的,则传来前需先base64_decode()解密
     * 返回未经base64加密的字符串
     */
    public static function deRSA_private($aString) {
        $pr_key = openssl_pkey_get_private(self::PRIVATE_KEY);//这个函数可用来判断私钥是否是可用的
        openssl_private_decrypt(base64_decode($aString), $decrypted, $pr_key);//公钥加密,私钥解密
        return $decrypted;
    }

    /*-----------------------------  私钥加密, 公钥解密 --------------------------------------*/
    /*
     * RSA私钥加密
     * 加密一个字符串,返回RSA加密后的内容
     * aString 需要加密的字符串
     * return encrypted rsa加密后的字符串
     */
    public static function enRSA_private($aString) {
        //echo "------------",$aString,"====";
        $pr_key = openssl_pkey_get_private(self::PRIVATE_KEY);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
        openssl_private_encrypt($aString, $encrypted, $pr_key);//私钥加密
        $encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
        //echo "加密后:",$encrypted,"\n";
        return $encrypted;
    }
    /*
     * RSA公钥解密
     */
    public static function deRSA_public($aString) {
        $pu_key = openssl_pkey_get_public(self::PUBLIC_KEY);//这个函数可用来判断公钥是否是可用的
        openssl_public_decrypt(base64_decode($aString), $decrypted, $pu_key);//公钥加密,私钥解密
        return $decrypted;
    }
}

使用

PHP使用
    use App\Tools\Rsa;
    $password = Rsa::deRSA_private($pwd);
JS使用
  1. 引用 JSEncrypt.js文件
  2. 声明+设置
var encrypt = new JSEncrypt();
var publicKey = "-----BEGIN PUBLIC KEY----------PUBLIC KEY END PUBLIC KEY-----";
encrypt.setPublicKey(publicKey);
  1. 加密
 var newPwd = encrypt.encrypt($pwd);
 
咻兔哔
咻兔哔·2019年11月6日

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处

推荐文章

构建现代化个人博客系统:技术亮点与创新实践
后端技术

构建现代化个人博客系统:技术亮点与创新实践

本文介绍了作者构建现代化个人博客系统的技术选型、架构设计和创新实践。核心亮点包括采用Go+Nuxt.js+Vue3技术栈,实现高性能、可扩展的博客平台;创新功能如AI智能摘要生成系统、高性能全文搜索、现代化文件上传系统;微服务化架构、容器化部署及多层次安全防护;性能优化策略如缓存策略、数据库优化和前端性能优化。此外,还展示了智能简历模块、Waline评论系统及多主题支持等特色功能,系统性能指标优异。作者分享了技术收获与未来规划,旨在帮助全栈开发者提升技术能力。

12月10日16
本站更换了新的技术栈
后端技术

本站更换了新的技术栈

本文介绍了基于Go+Nuxt.js+Vue3技术栈构建的现代化个人博客系统。该系统采用微服务架构,包含前台展示、后台管理和API服务三大模块,支持容器化部署,具备高性能与高可用性。后端使用Go、Gin、GORM等技术,前端采用Nuxt.js+Vue3+TailwindCSS,并集成AI智能摘要生成、全文搜索、文件上传等核心功能。系统注重安全设计,实施JWT认证、XSS防护等措施,同时通过Redis缓存、CDN加速等策略优化性能。整体架构展示了现代Web开发的最佳实践,为同类项目提供参考价值。

12月10日14
Gorm格式化时间输出的另一种实现
后端技术

Gorm格式化时间输出的另一种实现

Gorm在读取时间时默认带有时区,不符合常规的日期格式。本文提出了一种通过自定义结构体和使用Gorm的Hook方式来解决这个问题。作者首先定义了一个只包含时间字段的结构体,并使用`Str`后缀和`json`标签来指定时间字段只参与存储而不参与数据输出。接着,通过Gorm的Hook机制实现时间字段的格式化。虽然这种方法不是特别高明,但确实提供了一种有效的解决方案。

7月22日17
Golang三方库收集-不定期更新
后端技术

Golang三方库收集-不定期更新

以下是一些热门的第三方库,包括网络请求库、RPC库、Web框架、热重启库、定时任务库、获取机器状态库、JWT库、验证码库、邮件库、汉字转拼音库、消息队列库、随机数库、Redis客户端库、雪花 ID 生成器库、Excel处理库、WEB框架库、数据库库、配置库、REDIS库、工具包库、参数验证库、日志库、JSON库、协程池库和类型转换库。这些库各有特色,适用于不同的开发场景,值得一试。

7月28日7