RSA加密长度限制问题解决 BadPaddingException

2023-11-17

Exception in thread "main" javax.crypto.BadPaddingException: Decryption error
    at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:380)
    at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:291)
    at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:356)
    at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389)
    at javax.crypto.Cipher.doFinal(Cipher.java:2223)
    at com.asymmetric.rsa.TestRSA.testDecrypt(TestRSA.java:115)
    at com.asymmetric.rsa.TestRSA.main(TestRSA.java:34)

RSA加密支持长度117,解密支持最大长度128【同事测试结果】
RSA可以用公钥加密,私钥解密,同时也可以用私钥加密,公钥解密;

直接贴工具类


import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Base64;
import org.apache.log4j.Logger;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.io.ByteArrayOutputStream;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

/**
 * SecurityUtil简介
 *
 * @author zengdezheng3
 * @date 2020-02-20 19:29
 */
public class SecurityUtil {

    private final static Logger log = Logger.getLogger(SecurityUtil.class);
    private String secretKey;//加解密密钥
    private String charetSet = "utf-8";

    /**
     * 加密算法RSA
     */
    private static final String KEY_ALGORITHM = "RSA";
    /**
     * RSA最大加密明文大小
     */
    private static final int MAX_ENCRYPT_BLOCK = 117;
    /**
     * RSA最大解密密文大小
     */
    private static final int MAX_DECRYPT_BLOCK = 128;
    /**
     * 常量0
     */
    private static final int ZERO = 0;

    public SecurityUtil(){

    }

    public SecurityUtil(String secretKey) {
        this.setSecretKey(secretKey);
    }

    public void setSecretKey(String secretKey) {
        this.secretKey = secretKey;
    }

    public void setCharetSet(String charetSet) {
        this.charetSet = charetSet;
    }

    /**
     * AES加密
     *
     * @param str
     * @return
     */
    public String encryptStrWithAes(String str) {
        String resStr = null;
        try {
            byte[] raw = secretKey.getBytes(charetSet);
            SecretKeySpec key = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] byteContent = str.getBytes(charetSet);
            byte[] encrypted = cipher.doFinal(byteContent);
            BASE64Encoder encoder = new BASE64Encoder();
            resStr = encoder.encode(encrypted);
        } catch (Exception e) {
            log.error("AES加密失败", e);
            throw new RuntimeException("AES加密失败",e) ;
        }
        return resStr;
    }

    /**
     * AES解密
     *
     * @param str
     * @return
     */
    public String decryptStrWithAes(String str) {
        String resStr = null;
        try {
            byte[] raw = secretKey.getBytes(charetSet);
            SecretKeySpec key = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, key);
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] decrypted = cipher.doFinal(decoder.decodeBuffer(str));
            resStr = new String(decrypted, charetSet);
        } catch (Exception e) {
            log.error("AES解密失败", e);
            throw new RuntimeException("AES解密失败",e) ;
        }
        return resStr;
    }

    public String aesEncode(String str){

        String resStr = null;
        try {
            SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
            random.setSeed(secretKey.getBytes(charetSet));
            KeyGenerator kGen = KeyGenerator.getInstance("AES");
            kGen.init(128, random);
            SecretKey secretKey = kGen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// 创建密码器
            byte[] byteContent = str.getBytes("utf-8");
            cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
            byte[] result = cipher.doFinal(byteContent);
            BASE64Encoder encoder = new BASE64Encoder();
            resStr= encoder.encode(result);
        } catch (Exception e){
            e.printStackTrace();
        }
        return resStr;
    }

    public String aesDecode(String str){
        String resStr = null;
        try {

            KeyGenerator kGen = KeyGenerator.getInstance("AES");
            SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
            random.setSeed(secretKey.getBytes());
            kGen.init(128, random);
            SecretKey secretKey = kGen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// 创建密码器
            cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] decrypted = cipher.doFinal(decoder.decodeBuffer(str));
            resStr = new String(decrypted, charetSet);
        } catch (Exception e){
            e.printStackTrace();
        }
        return resStr;
    }

    /**
     * 随机生成密钥对
     * @throws NoSuchAlgorithmException
     */
    public static void genKeyPair() throws NoSuchAlgorithmException {
        // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
        // 初始化密钥对生成器,密钥大小为96-1024位
        keyPairGen.initialize(1024,new SecureRandom());
        // 生成一个密钥对,保存在keyPair中
        KeyPair keyPair = keyPairGen.generateKeyPair();
        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();   // 得到私钥
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();  // 得到公钥
        String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));
        // 得到私钥字符串
        String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded())));
        // 将公钥和私钥保存到Map
        System.out.println("公钥:" + publicKeyString);
        System.out.println("私钥:" + privateKeyString);

    }
    /**
     * RSA公钥加密
     * @param str
     * @param publicKey
     * @return
     * @throws Exception
     */
    public static String encrypt( String str, String publicKey ) throws Exception{
        //base64编码的公钥
        byte[] decoded = Base64.decodeBase64(publicKey);
        RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
        //RSA加密
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
        return Base64.encodeBase64String(cipher.doFinal(str.getBytes(StandardCharsets.UTF_8)));
    }

    /**
     * RSA私钥解密
     * @param str
     * @param privateKey
     * @return
     * @throws Exception
     */
    public static String decrypt(String str, String privateKey) throws Exception{
        //64位解码加密后的字符串
        byte[] inputByte = Base64.decodeBase64(str.getBytes(StandardCharsets.UTF_8));
        //base64编码的私钥
        byte[] decoded = Base64.decodeBase64(privateKey);
        RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
        //RSA解密
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, priKey);
        return new String(cipher.doFinal(inputByte));
    }

    /**
     * 公钥加密
     *
     * @param content      源数据
     * @param publicKey 公钥(BASE64编码)
     * @return
     * @throws Exception
     */
    public static String encryptByPublicKey(String content, String publicKey)
            throws Exception {
        byte[] keyBytes = Base64.decodeBase64(publicKey);
        byte[] data = content.getBytes(StandardCharsets.UTF_8);
        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        byte[] encrypt = encrypt(data, KeyFactory.getInstance(KEY_ALGORITHM), keyFactory.generatePublic(x509KeySpec));
        return  Base64.encodeBase64String(encrypt);
    }


    /**
     * 私钥加密
     *
     * @param content       源数据
     * @param privateKey 私钥(BASE64编码)
     * @return
     * @throws Exception
     */
    public static String encryptByPrivateKey(String content, String privateKey)
            throws Exception {
        byte[] keyBytes = Base64.decodeBase64(privateKey);
        byte[] data = content.getBytes(StandardCharsets.UTF_8);
        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);
        byte[] encrypt = encrypt(data, keyFactory, privateK);
        return Base64.encodeBase64String(encrypt);
    }


    /**
     * 私钥解密
     *
     * @param content 已加密数据
     * @param privateKey    私钥(BASE64编码)
     * @return
     * @throws Exception
     */
    public static String decryptByPrivateKey(String content, String privateKey)
            throws Exception {
        byte[] keyBytes = Base64.decodeBase64(privateKey);
        //64位解码加密后的字符串
        byte[] encryptedData = Base64.decodeBase64(content.getBytes(StandardCharsets.UTF_8));
        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        return new String(decrypt(encryptedData, keyFactory, keyFactory.generatePrivate(pkcs8KeySpec)));
    }


    /**
     * 公钥解密
     *
     * @param content 已加密数据
     * @param publicKey     公钥(BASE64编码)
     * @return
     * @throws Exception
     */
    public static String decryptByPublicKey(String content, String publicKey)
            throws Exception {
        byte[] keyBytes = Base64.decodeBase64(publicKey);
        //64位解码加密后的字符串
        byte[] encryptedData = Base64.decodeBase64(content.getBytes(StandardCharsets.UTF_8));
        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        Key publicK = keyFactory.generatePublic(x509KeySpec);
        return new String(decrypt(encryptedData, keyFactory, publicK));

    }

    /**
     * 解密公共方法
     */
    private static byte[] decrypt(byte[] data, KeyFactory keyFactory, Key key) throws Exception {

        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
        cipher.init(Cipher.DECRYPT_MODE, key);
        return encryptAndDecrypt(data, cipher, MAX_DECRYPT_BLOCK);
    }

    /**
     * 加密公共方法
     */
    private static byte[] encrypt(byte[] data, KeyFactory keyFactory, Key key) throws Exception {
        // 对数据加密
        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
        cipher.init(Cipher.ENCRYPT_MODE, key);
        return encryptAndDecrypt(data, cipher, MAX_ENCRYPT_BLOCK);
    }


    /**
     * 加密解密分段处理公共方法
     */
    private static byte[] encryptAndDecrypt(byte[] data, Cipher cipher, int maxSize) throws Exception {
        int inputLen = data.length;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        int offSet = ZERO;
        byte[] cache;
        int i = ZERO;
        // 对数据分段加密
        while (inputLen - offSet > ZERO) {
            if (inputLen - offSet > maxSize) {
                cache = cipher.doFinal(data, offSet, maxSize);
            } else {
                cache = cipher.doFinal(data, offSet, inputLen - offSet);
            }
            out.write(cache, ZERO, cache.length);
            i++;
            offSet = i * maxSize;
        }
        byte[] encryptedData = out.toByteArray();
        out.close();
        return encryptedData;
    }


    public static String decryptRSADefault(String privateKeyStr,String data) throws Exception {
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        byte[] privateKeyArray = privateKeyStr.getBytes();
        byte[] dataArray = data.getBytes();
        PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyArray));
        PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);

        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        return new String(cipher.doFinal(Base64.decodeBase64(dataArray)), StandardCharsets.UTF_8);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            /*genKeyPair();*/
            String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrqdHrXcgPbVvJkVfV9yyWfOsQiMSWtZRz40GUDjhiLmW6lsrU5" +
                    "HixbIc69O6ms4LL3joYnFvkvTRAkBbuMTRY6aaup6Cpsg+9HDFS6qlSPeq53VlTkoIZ990QvSL6fMyT/mwt7T66QevU8cXUHv3RT4Sbj5TclIwr2PXiom84mwIDAQAB";

String privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOup0etdyA9tW8mRV9X3LJZ86xCIxJa1lHPjQZQOOGIuZbqWytTke" +
                    "LFshzr07qazgsveOhicW+S9NECQFu4xNFjppq6noKmyD70cMVLqqVI96rndWVOSghn33RC9Ivp8zJP+bC3tPrpB69TxxdQe/dFPhJuPlNyUjCvY9eKibzibAgM" +
                    "BAAECgYAnJ9MqIS3halEq34xRj70Hz/+agq7vP4JH8wVtXSN/JKhgZTeUQdXP3PFnGVUhu4fK6cSLXEdkbQ9mfspgjypcHeV+lTzqR52oiuPEiMJPHFsSNYslorL" +
                    "ONmSWHyFGZAQe9H6Tl02GuIkSAXeruPYIHkx8WBGsIIwUeO3vRyXtUQJBAP033/PF8yAQwOJ6nnthcaaeSfu9zovPicKZ6P+5gXdBQYXX61cLqDX3gnyASZyrkgRn7" +
                    "FiZqZF2HPitPLJ+w+MCQQDuQJNYn7zt09E2fEvNjzWobt2oilpn/rDPzEzeaSGg1soxWt7KLWFqNfL+t++iUvlj+Kzx3I+o36HQK32vroXpAkABh7DmvC935iIEPFFw1" +
                    "WnmY9Z2mvMAjUR71Io/4VMS8WX/9QoLAJsHmHNFZVEMjUzYkfgvoN4RbvFF32YafgGZAkAAgG5O/3ccYRfNr5FRS33nbuRUmIX8NhMVPO7kgQArIIiodfKGJnZQDPEID" +
                    "Eca5mXUChADKl27E0157L2FAy8RAkAmnqO1yH+jN0dYccz6CibH0ReTjFNddojHqMxzl/ohDlCBTtn3RPHnzVz4U7iOh15Ka4JCVh+mMYtVoA9rgZwl";

            String content = "aRiSY6lzi0k/VfnSRc25R31pp4rEHfx633+E/vUF7yzzD9Gdblgn295jdvHn4eSB/uuDpYmwNQkpjYpaMCXJOJ6f2/Pp3uJEvurgnOOOoGw6OUHEUQh3YCYngWGi8jbwtXs0D5OZw1S6zQQAFWMMpzReMdEt67DcNOqvIe68xmCVTvfJhnW7lzFRrtcMe2w8ia8vYLJwlfr2fA1OfJlI+h6obEyVSFJhISTmccfkCCNqbZNnlzow2jA+NMkGoLnXXdOAnWspo7E/OV2mKkOhXxmFsUTCPE4ToC41N47VLn6Lc7byyYyMhPO4ZsmFI1tZAH01OiF+hMGgaHGzhHySpQ==";
            String decrypt = decryptByPrivateKey(content,privateKey);
            System.out.println("解密结果:" + decrypt);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

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

RSA加密长度限制问题解决 BadPaddingException 的相关文章

  • Mastercam软件安装包分享(附安装教程)

    目录 一 软件简介 二 软件下载 一 软件简介 Mastercam是一款广泛应用于机械加工领域的计算机辅助设计与计算机辅助制造 CAD CAM 软件 它由美国CNC软件公司开发 旨在帮助制造商设计和制造高精度的零部件 以下是Masterca
  • java Fileread用法及注意事项

    关于其创建 还有注意事项 package IOtest test1 import org junit Test import java io File import java io FileReader import java io IOE
  • 对线性代数库Eigen3中eulerAngles函数的理解

    编写程序时有时会遇到在四元数 旋转矩阵 欧拉角之间进行转换的操作 使用eulerAngles函数从旋转矩阵中获得欧拉角 了解其使用方法才能保证转换时不出错 头文件
  • 基于双参数蜜蜂算法解决车辆路径问题(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 Matlab代码实现 4 参考文献 1 概述 群智能起源于自然环境中生物群体经过长期自然
  • ffmpeg 合并转换文件_使用FFmpeg转换媒体文件的快速指南

    ffmpeg 合并转换文件 有许多开源工具可用于编辑 调整和将多媒体准确地转换为您所需的内容 诸如Audacity或Handbrake之类的工具非常出色 但有时您只想快速将文件从一种格式更改为另一种格式 输入FFmpeg FFmpeg是处理
  • 机器学习实战—利用SVD简化数据

    一 SVD的应用 奇异值分解 优点 简化数据 去除噪声 提高算法的结果 缺点 数据转换难以理解 利用SVD能够实现用小得多的数据集来表示原始数据集 这样做 实际上是去除了噪声和冗余信息 当我们视图节省空间时 去除噪声和冗余信息是目标 但是我
  • 正睿OI补题(搜索)

    搜索 目录 P1036 NOIP2002 普及组 选数 P2392 kkksc03考前临时抱佛脚 P1025 NOIP2001 提高组 数的划分 P6201 USACO07OPEN Fliptile S P1460 USACO2 1 健康的
  • linux svn新增用户名密码,Linux环境SVN添加用户账号及密码

    一 检查Svn安装版本 svn version 结果为 root iZm5e9ujl2isnk0qfeeyyhZ svn version svn version 1 7 14 r1542130 compiled Apr 11 2018 02
  • OpenHarmony之轻量系统编译构建流程

    首先我们先来熟悉几个概念 子系统 子系统是一个逻辑概念 它由一个或多个具体的组件组成 OpenHarmony整体遵从分层设计 从下向上依次为 内核层 系统服务层 框架层和应用层 系统功能按照 系统 gt 子系统 gt 组件 逐级展开 在多设
  • sql语句常见问题

    between是否包括两端 与字段类型有关 数据库类型如果是data 则包括两端 如果是datatime 则不包括右边 时间转字符串 DATE FORMAT statistic date Y m d as statistic date SQ
  • obsidian移动端PC段同步

    参考内容 https zhuanlan zhihu com p 431124370 https www bilibili com read cv13339751 文章目录 1 安装坚果云 2 开启坚果云WebDAV 3 在FolderSyn
  • 转载--我与英语技术书籍

    原文 http www cnblogs com KnightsWarrior p EnglishTechBooks html 我与英语技术书籍 2013 09 05 00 01 by 圣殿骑士 17877 阅读 122 评论 收藏 编辑 前
  • 优达学城《DeepLearning》2-1:卷积神经网络

    本次由3部分组成 可视化卷积神经网络 设计和训练一个CNN来对MNIST手写数字分类 设计并训练一个CNN来对CIFAR10数据集中的图像进行分类 本次遇到的深度学习核心概念 SGD优化器 GD就是梯度下降 Gradient Descent
  • 【SpringCloud】Ribbon定制化配置

    文章目录 使用Ribbon自带负载均衡算法 添加负载均衡算法Configuration RestTemplate使用上面负载均衡算法 自定义负载均衡算法 负载均衡算法实现 RestTemplate 在Controller中使用该负载均衡算法

随机推荐

  • SLIP, PPP, L2F ,PPTP, L2TP的简介以及关联

    都是网络连接的方式 其中又分为两大类 拨号连接 dialup 和虚拟私人网络 virtual private network 俗称VPN 依旧用我的浅薄而又粗俗的言语来向大家解释一下 如有错误 尽情打脸 拨号连接 Dalup 包含两种连接方
  • Tim定时器学习打卡

    通用定时器 TIM2 TIM3 TIM4和TIM5 1 主要功能 16位向上 向下 向上 向下自动装载计数器 16位可编程 可以实时修改 预分频器 计数器时钟频率的分频系数为1 65536之间的任意 数值 4个独立通道 输入捕获通道 输出比
  • 【Sql语句】创建表、修改、删除表,增添列、删除列

    编写以下语句 1 创建dept表 2 创建emp表 3 将列Last name的长度增加到50 4 根据表emp创建employees2 5 删除表employees2 6 在表dept和emp中添加新列test column 并检查所作的
  • Windows桌面文件夹删除被提示“找不到该项目”——顽固目录、文件的删除

    注意 若转载 请贴上链接 https blog csdn net qq 41042595 article details 112576438 如若发现抄袭或未标明来源现象 都可举报反馈 文章目录 问题来源场景 原因分析 解决方案 步骤一 1
  • Java创建文件和文件夹

    创建文件和文件夹 有异常 抛出或捕获IOException 如果文件 文件夹 存在则不创建 也不会覆盖文件中的内容 createNewFile 方法创建一个普通文件 使用mkdir 方法创建一个文件夹 使用mkdirs 方法创建多级文件夹
  • Android不同版本SD卡存储权限解决

    1 Android6 0之前 6 0之前是不需要动态申请权限的 直接在manifest中申请即可以正常使用
  • gulp基础:gulptask

    var gulp require gulp var browserify require gulp browserify 模块化的打包 var uglify require gulp uglify js的压缩 var webserver r
  • Mysql设计学生宿舍管理系统+考勤系统

    一 学生宿舍管理系统 要求 学校宿舍管理系统 要求包含宿舍信息 学生信息 每日的宿舍查房记录 分析 学生与宿舍的关系 m 1 宿舍的查房记录是根据宿舍来查的 与宿舍有关系 一个宿舍可以多次查房 宿舍与查房记录是1 m的关系 宿舍信息表 cr
  • 浅谈什么是大数据

    浅谈什么是大数据 有人可能发现了 我这个专栏写的就是大数据 所以我们一起来谈谈大数据 大数据概念 百度百科 对于 大数据 Big data 研究机构Gartner给出了这样的定义 大数据 是需要新处理模式才能具有更强的决策力 洞察发现力和流
  • 基于BCM53262交换芯片平台的Linux操作系统移植(一)编译环境

    2018 05 10 09 26 zhoulinhua 2018 05 10 一 源码 相关链接 http www at91 com linux4sam bin view Linux4SAM 1 a91bootstrap源码获取 git c
  • C++ 外观模式

    include
  • redhat 6.4安装oracle11g RAC (四)

    创建集群数据库 在节点rac1上用oracle用户执行dbca创建RAC数据库 root rac1 su oracle oracle rac1 dbca 选择创建数据库 自定义数据库 也可以是通用 配置类型选择Admin Managed 输
  • 微信小程序使用npm安装包

    小程序现在支持直接通过npm安装包了 点击这里了解更多 记录一下我自己的安装步骤及安装过程中遇到的一些问题 希望能够帮助到正在阅读此篇文章的你 我就直接通过在项目根目录安装miniprogram datepicker做演示了 1 在项目根目
  • SIMD优化之ARM纯汇编开发

    ARM纯汇编开发 注 这篇文章是两年前写的 现在更新到CSDN 当时认知不足 其中可能有不少错误 敬请行家指正 为什么要用纯汇编 开发效率高 这里可能让很多人大跌眼镜了 纯汇编开发效率高 首先 这个是有限定条件的 需要反复调优的重度运算场景
  • selenium读取excel中的数据实现自动登录

    一 当用selenium实现自动登录时 测试不同账号的登录 1 可以写一个登录方法login driver username password 对每一个账号分别写一个方法test zhnagshan log 然后将数据传入到登录方法logi
  • 【自动驾驶技术】优达学城无人驾驶工程师学习笔记(六)——Github与Markdown相关教程

    Github与Markdown相关教程 本博文为笔者关于优达学城无人驾驶工程师课程中计算机视觉基础部分的学习笔记 该部分为实现车道线图像识别功能的基础课程 关于本课程的详细说明请参考优达学城官网 优达学城为学员提供了一个简短的Github教
  • C++编程入门--矩阵类重载运算符

    题目 定义3 3矩阵类Matrix 在其中重载运算符 实现矩阵的基本运算 首先 我们先确定这个矩阵类的基本功能 我们来声明其成员函数的功能 列出来如下 include
  • SQLi LABS Less-21

    第21关使用POST请求提交参数 对用户名和密码中的特殊字符进行了转译 难度较大 21关的突破口在cookie 用户登录成功后 将用户名进行base64加密后 保存在cookie中 点击提交按钮的时候 会从cookie中获取保存的用户名 使
  • 矩阵 矩阵的基本运算规则 行列式 逆矩阵

    矩阵 本质 矩阵是个数表 从线性变换的视角看 矩阵是记录线性变换这一过程的描述信息 记为 A m n A m times n Am n 或 A a i j A a ij A aij 或 A a i j m n A a ij m times
  • RSA加密长度限制问题解决 BadPaddingException

    Exception in thread main javax crypto BadPaddingException Decryption error at sun security rsa RSAPadding unpadV15 RSAPa