php之RSA加密解密

2023-11-16

介绍

RSA算法属于非对称加密算法,非对称加密算法需要两个秘钥:公开密钥(publickey)私有秘钥(privatekey).公开密钥和私有秘钥是一对,如果公开密钥对数据进行加密,只有用对应的私有秘钥才能解密;如果私有秘钥对数据进行加密那么只有用对应的公开密钥才能解密.因为加密解密使用的是两个不同的秘钥,所以这种算法叫做非对称加密算法.简单的说就是公钥加密私钥解密,私钥加密公钥解密

准备

需要给PHP打开OpenSSL模块

代码

/**
 * RSA算法属于非对称加密算法,非对称加密算法需要两个秘钥:公开密钥(publickey)和私有秘钥(privatekey).公开密钥和私有秘钥是一对,如果公开密钥对数据进行加密,只有用对应的私有秘钥才能解密;如果私有秘钥对数据进行加密那么只有用对应的公开密钥才能解密.因为加密解密使用的是两个不同的秘钥,所以这种算法叫做非对称加密算法.简单的说就是公钥加密私钥解密,私钥加密公钥解密.
 * 需要给PHP打开OpenSSL模块
 * 生成公钥和私钥的链接:  http://web.chacuo.net/netrsakeypair
 * openssl_pkey_get_public //检查公钥是否可用
 * openssl_public_encrypt //公钥加密
 * openssl_pkey_get_private //检查私钥是否可用
 * openssl_private_decrypt //私钥解密
 *
 */
 

// $str = '封装测试';
$str = json_encode(['a' => 1, 'b' => 2, 'f' => 6,]);
$cdata = RSA_openssl($str);

var_dump($cdata);
echo "<hr>";
$ddata = RSA_openssl($cdata, 'decode');
var_dump($ddata);

/**
 * RSA数据加密解密
 * @param type $data
 * @param type $type encode加密  decode解密
 */
function RSA_openssl($data, $type = 'encode')
{
    if (empty($data)) {
        return 'data参数不能为空';
    }
    if (is_array($data)) {
        return 'data参数不能是数组形式';
    }

    $rsa_public = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqK7dJlIDd1OKncuMHvrKjytBIPnfuaRA3j9J+4odMrpWA+z+ZZTMVv8lNOBn2LoqgfcvhnyvVKRHCgfD3lH4cK85t2sAAk91LuOW9nR08OUaz038M/wBsjNSoEkLGb7W0N/Jc3Wlth4xdZWwrn1QnHJvJtxVRzqTntn9DqWt/peHwA5r3mrEvEW5WtRnsQfG5l2k0OykhynbHmJcURRTU4oEFKo1VFH17eOZ4iTNbc1QTKhKFApvdv2LShjKNnX/OoKG671f2qUNNuSkGifDYGHg9MLNgMnuw4nnYXjeZL/0uVu6zOyXHx1PIFL5qmsEZoOZ64kN8WrEN2EwvSS6uwIDAQAB';
    if(empty($rsa_public)){
        $rsa_public = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmkANmC849IOntYQQdSgLvMMGm
8V/u838ATHaoZwvweoYyd+/7Wx+bx5bdktJb46YbqS1vz3VRdXsyJIWhpNcmtKhY
inwcl83aLtzJeKsznppqMyAIseaKIeAm6tT8uttNkr2zOymL/PbMpByTQeEFlyy1
poLBwrol0F4USc+owwIDAQAB
-----END PUBLIC KEY-----';
    }
    $rsa_private = 'MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQCort0mUgN3U4qdy4we+sqPK0Eg+d+5pEDeP0n7ih0yulYD7P5llMxW/yU04GfYuiqB9y+GfK9UpEcKB8PeUfhwrzm3awACT3Uu45b2dHTw5RrPTfwz/AGyM1KgSQsZvtbQ38lzdaW2HjF1lbCufVCccm8m3FVHOpOe2f0Opa3+l4fADmveasS8Rbla1GexB8bmXaTQ7KSHKdseYlxRFFNTigQUqjVUUfXt45niJM1tzVBMqEoUCm92/YtKGMo2df86gobrvV/apQ025KQaJ8NgYeD0ws2Aye7DiedheN5kv/S5W7rM7JcfHU8gUvmqawRmg5nriQ3xasQ3YTC9JLq7AgMBAAECggEBAINZZqtoQXqxesbUsQ+Oihxhuh1LdYLA/CITdjCAo6vUnRYBfTbsXxF/LCG4fCSvElqReFhozr5CDW8qDMMZYTOdvnusvh0OcllIr0zJ8iWCwRWbzD9OhKOWg0h8mEA78lpDaEKX4ammaSz+ms3Elvi7wwGnoGAOpNSVOhAlww7y95F2rApVq7UfFAhCORlf8lfr2dLruQQulSkl7sxF3Dee8ze3U6WWP7ezHmqBGd2mRWM0Ub8e55iooPYMkl+tYlZOTrhJvyy858mfORY5+HISrrnOf9lvWghmvKE9Dlm01F/cwu//fOBmGQxLJUSVIqh579OafQOm24JGCOv7o4ECgYEA9VCPmje1FEPOJJcXvtD9srwTURXBz64f4QevPymxlt2/gK4hxY8wF2kFuNA2ZSQI0wxHRpldAwwDCH+i5AYqP11vduGmFq9o2Usr8lyI6K+F+0kUM0ZYzTFZlAdxU4pW3FHJDt2/PyeLxgab5CWuoO93gpRw9KBarTHW0nJQNakCgYEAsAfNz4TpBw+Mhij1MsopkEDF7ITC1JuE5L1uaKFnG6pEdY/Q0TmqSlKwGS+hkss7Tc71UMFtI5TBJ5QDpGQ6PfBVnavRvYSrEF8a4ggre3psundnhVwyWQjGJu0QQMa65LECGm7dLRtkI6z6N25e2Gu1AP/LzjMQp+51AJMf48MCgYEAqnDEtWOLHn9V1LpdtyhBfFOMIEQ7mm3inFjYe8weJTIAggl6UWcBBOLlJNkVUgRNVUUsqHKZ2yoXWWpE5KUb6VajwTdaTFynPoIqEIQWY4TAVC0cKdvwivCEyoK5TE/LtdvlE70hyWFSjc29tjAwOoTmxgUYzf4zwi3kkeb2r7ECgYEAh7S8eethKsxV7WfOAGXSPR9ydrCy8u0iOqW/ZHJp5u4Q8QD6XxIxsjKlCAWsblq3UXjnrmYwGWoorrZxSF7sd6u8lV1MyOpqZqirNO5Pd1YeVHKRIEK/ndwhxwijqwyKMJw1nuMxKAEh5k8IZ4tzGy2N0UNif4jmolA3a0YBI7kCgYEAgOjIV1mYeV5RZsddpvvt5f/LK0y4Zqqprdb0qeF9gL5JNb9vZfOMN8Sf75YzrS5jETHItTpQnW8Ozjtd8G8NRqQV2Rz97D+eHFrYeoBzAK8+yG1FoiIHcQaG2DM5jrKqgDYCKXVkk4JerUa1boaxamgbx7VuqW46cEJxGQuHXkM=';
    if(empty($rsa_private)){
        $rsa_private = '-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKaQA2YLzj0g6e1h
BB1KAu8wwabxX+7zfwBMdqhnC/B6hjJ37/tbH5vHlt2S0lvjphupLW/PdVF1ezIk
haGk1ya0qFiKfByXzdou3Ml4qzOemmozIAix5ooh4Cbq1Py6202SvbM7KYv89syk
HJNB4QWXLLWmgsHCuiXQXhRJz6jDAgMBAAECgYAIF5cSriAm+CJlVgFNKvtZg5Tk
93UhttLEwPJC3D7IQCuk6A7Qt2yhtOCvgyKVNEotrdp3RCz++CY0GXIkmE2bj7i0
fv5vT3kWvO9nImGhTBH6QlFDxc9+p3ukwsonnCshkSV9gmH5NB/yFoH1m8tck2Gm
BXDj+bBGUoKGWtQ7gQJBANR/jd5ZKf6unLsgpFUS/kNBgUa+EhVg2tfr9OMioWDv
MSqzG/sARQ2AbO00ytpkbAKxxKkObPYsn47MWsf5970CQQDIqRiGmCY5QDAaejW4
HbOcsSovoxTqu1scGc3Qd6GYvLHujKDoubZdXCVOYQUMEnCD5j7kdNxPbVzdzXll
9+p/AkEAu/34iXwCbgEWQWp4V5dNAD0kXGxs3SLpmNpztLn/YR1bNvZry5wKew5h
z1zEFX+AGsYgQJu1g/goVJGvwnj/VQJAOe6f9xPsTTEb8jkAU2S323BG1rQFsPNg
jY9hnWM8k2U/FbkiJ66eWPvmhWd7Vo3oUBxkYf7fMEtJuXu+JdNarwJAAwJK0YmO
LxP4U+gTrj7y/j/feArDqBukSngcDFnAKu1hsc68FJ/vT5iOC6S7YpRJkp8egj5o
pCcWaTO3GgC5Kg==
-----END PRIVATE KEY-----';
    }
    //私钥解密
    if ($type == 'decode') {
        $private_key = openssl_pkey_get_private($rsa_private);
        if (!$private_key) {
            $rsa_private = "-----BEGIN RSA PRIVATE KEY-----\n" .
                wordwrap($rsa_private, 64, "\n", true) .
                "\n-----END RSA PRIVATE KEY-----";
            $private_key = openssl_pkey_get_private($rsa_private);
            if (!$private_key) {
                return ('私钥不可用');
            }
        }
       $key_len = openssl_pkey_get_details($private_key)['bits']; // 获取私钥的生成的长度
        $decrypted = "";
        $part_len = $key_len / 8;
        //url  中的get传值默认会吧+号过滤成' ',替换回来就好了
        str_replace('% ', '+', $encrypted);
        $base64_decoded = base64_decode($encrypted);
        $parts = str_split($base64_decoded, $part_len);
        foreach ($parts as $part) {
            $decrypted_temp = '';
            openssl_private_decrypt($part, $decrypted_temp, $private_key);
            $decrypted .= $decrypted_temp;
        }
        return $decrypted;
    }

    //公钥加密
    $res = openssl_pkey_get_public($rsa_public);
    if (!$res) {
        $rsa_public = "-----BEGIN PUBLIC KEY-----\n" .
            wordwrap($rsa_public, 64, "\n", true) .
            "\n-----END PUBLIC KEY-----";
        if (!$rsa_public) {
            return false;
        }
    }
    $key_len = openssl_pkey_get_details($rsa_public)['bits']; // 获取私钥的生成的长度
    $encrypted = '';
    $part_len = $key_len / 8 - 11;
    $parts = str_split($data, $part_len);
    foreach ($parts as $part) {
        $encrypted_temp = '';
        openssl_public_encrypt($part, $encrypted_temp, $rsa_public);
        $encrypted .= $encrypted_temp;
    }
    return base64_encode($encrypted);
}

RSA类

<?php

namespace util;


/**
 * rsa加密类
 * Class Rsa
 */
class RsaUtil
{

    const CHAR_SET = "UTF-8";
    const BASE_64_FORMAT = "UrlSafeNoPadding";
    const RSA_ALGORITHM_KEY_TYPE = OPENSSL_KEYTYPE_RSA;
    const RSA_ALGORITHM_SIGN = OPENSSL_ALGO_SHA256;

    protected $public_key;
    protected $private_key;
    protected $key_len;

    public function __construct($pub_key = '', $pri_key = null)
    {
        if ($pub_key) {
            $this->public_key = $pub_key;
            $pub_id = openssl_pkey_get_public($this->public_key);
            $this->key_len = openssl_pkey_get_details($pub_id)['bits'];
        }
        if ($pri_key) {
            $this->private_key = $pri_key;
            $pri_id = openssl_pkey_get_private($this->private_key);
            $this->key_len = openssl_pkey_get_details($pri_id)['bits'];
        }
    }

    /*
     * 创建密钥对
     */
    public static function createKeys($key_size = 1024)
    {
        $config = array(
            "private_key_bits" => $key_size,
            "private_key_type" => self::RSA_ALGORITHM_KEY_TYPE,
        );
        $res = openssl_pkey_new($config);
        openssl_pkey_export($res, $private_key);
        $public_key_detail = openssl_pkey_get_details($res);
        $public_key = $public_key_detail["key"];

        return array(
            "public_key" => $public_key,
            "private_key" => $private_key,
        );
    }

    /*
     * 公钥加密
     */
    public function publicEncrypt($data)
    {
        $encrypted = '';
        $part_len = $this->key_len / 8 - 11;
        $parts = str_split($data, $part_len);

        foreach ($parts as $part) {
            $encrypted_temp = '';
            openssl_public_encrypt($part, $encrypted_temp, $this->public_key);
            $encrypted .= $encrypted_temp;
        }

        return base64_encode($encrypted);
    }

    /*
     * 私钥解密
     */
    public function privateDecrypt($encrypted)
    {
        $decrypted = "";
        $part_len = $this->key_len / 8; 
        //url  中的get传值默认会吧+号过滤成' ',替换回来就好了
        str_replace('% ', '+', $encrypted); 
        echo $encrypted;
        $base64_decoded = base64_decode($encrypted);
        $parts = str_split($base64_decoded, $part_len);
        foreach ($parts as $part) {
            $decrypted_temp = '';
            openssl_private_decrypt($part, $decrypted_temp, $this->private_key);
            $decrypted .= $decrypted_temp;
        }
        return $decrypted;
    }

    /*
     * 私钥加密
     */
    public function privateEncrypt($data)
    {
        $encrypted = '';
        $part_len = $this->key_len / 8 - 11;
        $parts = str_split($data, $part_len);

        foreach ($parts as $part) {
            $encrypted_temp = '';
            openssl_private_encrypt($part, $encrypted_temp, $this->private_key);
            $encrypted .= $encrypted_temp;
        }
        return base64_encode($encrypted);
    }

    /*
     * 公钥解密
     */
    public function publicDecrypt($encrypted)
    {
        $decrypted = "";
        $part_len = $this->key_len / 8;
        $base64_decoded = base64_decode($encrypted);
        $parts = str_split($base64_decoded, $part_len);

        foreach ($parts as $part) {
            $decrypted_temp = '';
            openssl_public_decrypt($part, $decrypted_temp, $this->public_key);
            $decrypted .= $decrypted_temp;
        }
        return $decrypted;
    }

    /*
     * 数据加签
     */
    public function sign($data)
    {
        openssl_sign($data, $sign, $this->private_key, self::RSA_ALGORITHM_SIGN);
        return base64_encode($sign);
    }

    /*
     * 数据签名验证
     */
    public function verify($data, $sign)
    {
        $pub_id = openssl_get_publickey($this->public_key);
        $res = openssl_verify($data, base64_decode($sign), $pub_id, self::RSA_ALGORITHM_SIGN);
        return $res;
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php之RSA加密解密 的相关文章

  • foreach 循环中 current() 的意外行为[重复]

    这个问题在这里已经有答案了 这是一个简单的循环 list array A B C D foreach list as var print current list Output demo http 3v4l org sBDjl BBBB O
  • jquery ajax加载后丢失CSS

    大家知道如何解决 load Ajax 请求后的 css 问题吗 例如 如果我想从网页加载 DIV 在我的 Ajax 请求之后 container load path to div div id 我丢失了与该 div 关联的所有 css 和脚
  • 使用 Apache 允许 Glassfish 和 PHP 在同一服务器中协同工作

    是否可以建立从 Java 到 php 文件的桥梁 我有一个用 Java 编写的应用程序 我需要执行http piwik org http piwik org 这是用 PHP 编写的 在服务器中 我正在运行 PHP 但无法从浏览器访问 php
  • 间歇性 PHP 抽象类错误

    我已经为此奋斗了一段时间 但无法弄清楚 也许其他人也有 或者 Slim PHP Apache 等这里有更深层次的问题 在正常工作几个小时后 我的 Slim 安装将开始给出所有路线均如此 致命错误 类 Slim Collection 包含 1
  • PHP-列出一年中一个月中的所有天[重复]

    这个问题在这里已经有答案了 可能的重复 我在 PHP 中有 2 个日期 如何运行 foreach 循环来遍历所有这些日期 https stackoverflow com questions 3207749 i have 2 dates in
  • CakePHP - 选择性 SSL

    如何对网站的某些部分强制使用 HTTPS 例如登录页面或注册页面 并使用 HTTP 来完成网站的其余部分 我最喜欢的强制转换为 https 的方法是将其作为 php 脚本中的第一件事 它可以在 Joomla 中运行 也可以在 CakePHP
  • 这是依赖注入吗?这是一种不好的做法吗?

    我有一个小框架 我是这样编码的 我不确定这是否称为依赖注入 我不知道它是否像设计模式 我也不知道并且想知道是否通过 this因为 param 是一种不好的做法 看看这个 不是一个有效的示例 只是将这些代码写入浏览器中以供解释 This is
  • 通过 PHP 连接到 socket.io(nodejs)

    我需要通过 php 连接到 websocket 发送数据并立即断开连接 无需等待套接字的响应 我用了大象io http elephant io 但更新库后不起作用 请告诉我如何通过 PHP 连接到 websocket 我也遇到了这个问题 学
  • 如何使用 AJAX/jQuery 显示打印内容?

    所以我试图理解整个 AJAX jQuery 的事情 现在 当我单独运行这个 PHP 脚本时 我必须等待并观察轮子旋转 直到循环完成然后加载 while row mysql fetch array res postcode to storm
  • 动态创建和下载Doc文件

    因此 我尝试动态创建 doc 文件并让用户在单击按钮时下载该文件 这些是我找到的用于下载文件的标头 header Content Description File Transfer header Content Type applicati
  • 如何解决 注意:未定义索引:第 21 行 C:\xampp\htdocs\invmgt\manufactured_goods\change.php 中的 id [重复]

    这个问题在这里已经有答案了 我的 PHP 代码有一个问题 显示 注意 未定义的索引 我确信它非常简单 因为我是初学者 所以我不太清楚到底出了什么问题 所以请帮助我 这是代码
  • 将 PayPal 返回 URL 设置为 localhost

    我正在尝试集成 Paypal 并且在此过程中使用沙箱 我按照以下问题中接受的答案的步骤进行操作 设置 PayPal 返回 URL 并使其自动返回 https stackoverflow com questions 7642895 setti
  • 如何在php中根据url从mysql获取数据?

    我在 mysql 数据库中有一个页表 其中包含 page name title content author 字段 我想用 php 来获取它http www domain com index php page page name http
  • 为什么 PHPUnit 将一些右大括号显示为未被覆盖?

    我正在使用 PHPUnit 3 6 7 PHP CodeCoverage 1 1 1 和 Xdebug 2 1 2 当我让 PHPUnit 将代码覆盖率统计信息写入 clover 样式的 XML 文件时 它偶尔会显示一个右花括号 表示测试未
  • PHP MVC 应用程序中哪里可以捕获异常?

    我有一个中小型 PHP 应用程序 用于练习 OOP 和 MVC 技能 我有初始化 引导程序调用的文件Router谁打电话控制器 gt 服务层 gt 存储库 数据库 然后将变量发送回视图层 所有依赖项均由 DiC IOC 处理 我创建抽象类
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 使用 PHP 将 SVG 图像转换为 PNG

    我正在开发一个网络项目 该项目涉及动态生成的美国地图 根据一组数据为不同的州着色 这个 SVG 文件为我提供了一张很好的美国空白地图 并且很容易更改每个州的颜色 困难在于 IE 浏览器不支持 SVG 因此为了让我使用 svg 提供的便捷语法
  • 一些基本的 PHP 问题 [已关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我只是有一些基本的 php 问题来加深我对学习的理解 但我找不到简单的答案 我有一个 php ajax 应用程序 它生成 mysql

随机推荐

  • cpuz测试分数天梯图_2015最新cpu天梯图 cpu性能排行榜

    西安兵马俑在线3月19日讯查找排名方法 搜索CPU型号 例如 按Ctrl F键 搜 i7 5960X 这个CPU型号 若需获知个人使用的电脑CPU具体型号 查看计算机属性 或用CPU Z这个软件 常用名词解释 CPUModel 处理器型号
  • vsCode关闭代码检查工具

    在script标签里 第一行输入下面的内容即可 转载于 https www cnblogs com caoxueying2018 p 10062329 html
  • 内核运行环境

    复杂度2 5 机密度2 5 最后更新2021 05 06 AIX内核有两种运行环境 process environment和interrupt environment 用户进程call内核系统调用 或者内核系统调用嵌套call其它系统调用
  • 2023年信息与通信工程国际会议(JCICE 2023)

    会议简介 Brief Introduction 2023年第二届信息与通信工程国际会议 JCICE 2023 会议时间 2023年5月12日 14日 召开地点 中国 成都 大会官网 JCICE 2023 2023 International
  • DeeplabCut安装教程(CPU)版

    DeeplabCut安装教程 CPU 版 文章目录 DeeplabCut安装教程 CPU 版 前言 安装步骤 1 进入官网下载对应的DeepLabCut zip文件 附官网链接 2 解压到任意位置 3 打开Anaconda Navigato
  • c++模板(函数模板,类中函数模板,类模板)

    作用 减少程序中的冗余信息 如 多个函数或类的除了参数类型外 其余都完全相同时 可以使用模板来减少重复信息 参考函数重载时 输入参数数量也相同的情况 1 函数模板 即建立一个通用函数 只不过该函数的返回类型和形参类型都不具体指定 其定义格式
  • Python实现找零兑换的三种解法

    找零兑换 找零兑换问题最直接的解法就是贪心策略 比如问题 有面值1 5 10 25的硬币 求解兑换63元所需的最少硬币数 贪心策略的思想就是不断的利用面值最大的硬币去尝试 不行了 在尝试较小面值的硬币 该例中也即使用25的硬币去尝试 2枚2
  • 华为服务器怎么换系统,云服务器怎么更换系统

    云服务器怎么更换系统 内容精选 换一换 弹性云服务器系统密码涉及到客户重要的私人信息 提醒您妥善保管密码 如果您忘记密码或密码过期 可以重置密码 如果弹性云服务器提前安装了密码重置插件 请参见在控制台重置弹性云服务器密码 使用公共镜像的弹性
  • 【简单易用】基于Qt的跨平台自定义标题栏控件QJamWindow

    一 概述 QJamWindow是一个基于Qt的跨平台自定义标题栏控件 你可以通过它方便得设计出属于自己的标题栏 特性 1 标题栏高度可调 标题栏背景色设定 2 图标及其尺寸 图标背景色设定 3 Control box宽度 鼠标经过 按下颜色
  • JAVA基础必备功能之导出ZIP文件

    导出ZIP文件 比较常用的两种 导出图片压缩文件 导出excel压缩文件 导出思路 需要导出的文件转存为byte数组保存到Map 然后遍历压缩成zip 需要引入jar
  • 链表— —循环链表的算法实现

    Joseph问题 有 10 个小朋友按编号顺序 1 2 10 顺时针方向围成一圈 从 1 号开始顺时针方向 1 2 9 报数 凡报数 9 者出列 显然 第一个出圈为编号 9 者 最后一个出圈者的编号是多少 第 5 个出圈者的编号是多少 in
  • lintcode 631 · 最大矩阵II【矩阵 中等 vip】

    题目 https www lintcode com problem 631 给出一个只有 0 和 1 组成的二维矩阵 找出最大的一个子矩阵 使得这个子矩阵的主对角线元素均为 1 其他元素均为 0 你可以认为所求的矩阵一定是一个方阵 主对角线
  • 组是由圆括号分开的正则表达式 随后可以根据它们的组号进行调用 第 0 组表示整个匹 配表达式 第1 组表示第 1 个用圆括号括起来的组 等等 因此 在表达式 A B C D 中 有 3 个组 第 0 组 ABCD 第 1 组是 BC 以及第
  • Acwing790.数的三次方根

    解题思路 include
  • Pandora-ChatGPT(离线安装教程)(附安装包)

    要安装Pandora ChatGPT 1 1 0 tar gz 您可以按照以下步骤进行操作 安装包 https wwue lanzouj com iOMwG0yeozxg 解压缩文件 tar xvf Pandora ChatGPT 1 1
  • 设置bitmap的宽高,同时将bitmap转换为file对象

    public class BitmapToSizeChangeFile 将bitmap转换为file存储起来 param bitmap return public static File
  • Dijkstra C艹板子

    迪杰斯特拉算法主要特点是从起始点开始 采用贪心算法的策略 每次遍历到始点距离最近且未访问过的顶点的邻接节点 直到扩展到终点为止 题源 最短路 蓝桥云课 lanqiao cn 如下图所示 G 是一个无向图 其中蓝色边的长度是 1 橘色边的长度
  • 绕过JavaScript debugger三种解决方法

    最近网上挺火的一段加密混淆JS 格式化展开后有300多行 目的是解析生成一个cookie 不携带cookie 就不能加载网页源码 典型的反爬虫操作 看后觉得好使的请记得点赞哦 烧鸡么么哒 谢谢 JS会自动监视是否打开了调试器 如果打开了 就
  • STM32锁住,解开方法

    一 STM32 被锁住后的解开方法 问题 STM32 JTAG SWD禁用导致无法烧写 由于STM32的引脚功能较多 在为了方便硬件的使用 常会使用复用重映射的功能 这里主要涉及的是SWD和JTAG端口的引脚对应出现的问题 为了使得TIM2
  • php之RSA加密解密

    介绍 RSA算法属于非对称加密算法 非对称加密算法需要两个秘钥 公开密钥 publickey 和私有秘钥 privatekey 公开密钥和私有秘钥是一对 如果公开密钥对数据进行加密 只有用对应的私有秘钥才能解密 如果私有秘钥对数据进行加密那