精华内容
下载资源
问答
  • tp6api接口加密中间件

    万次阅读 2021-06-19 09:16:46
    前段时间老板突然说,APP的接口能不能加密,token容易被人破解,让我想个办法,不让别人破解。我一阵搜索脑袋,发现这东西没做过,就对老板说了一句我试试。作为一个程序员,面向百度编程,已成了必备技能。网上百度...

    前言

    前段时间有个同行突然说,APP的接口能不能加密,token容易被人破解,让我想个办法,不让别人破解。我一阵搜索脑袋,发现这东西没做过,就对他说了一句我试试。作为一个程序员,面向百度编程,已成了必备技能。网上百度一下,主要有几种方式进行加密:

    1. php后端生成密钥发给开发人员,开发人员根据密钥,把参数加上进行md5加密,生成sign。后端拿到数据根据密钥也进行加密,比对sign。安全性较强
    2. token加密,这个加密方式已经太普遍了,只要拿到用户的token,就可以随便请求,安全性一般
    3. 通过对称加密算法,该加密算法对uid+网站公钥进行时效加密,在一定时效内可用。在会员登录成功时,服务器端对该ID加密后返回给客户端,客户端每次请求接口的时候带上该参数,服务器端通过解密认证。

    综合起来还是第一种靠谱

    用tp6中间件实现加密

    主要分为两部分:

    1. 生成APP密钥,这个密钥可以是一串乱码,也可以是随机字符串。
    2. tp6中间件验证

    生成密钥

    这个可以看自己的想法来生成,只要不会重复,就不会出问题

        public static function create_unique() {
           $data = $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']    //生成密钥
               .time() . rand();
           return substr(md5(time().$data),0,24);           //截取前面24位
           //return md5(time().$data);                            //进行md5加密,并返回一个密钥
       }
    

    把这个密钥发给APP开发人员,开发人员利用密钥把参数加密。

    重点来了,tp6中间件验证密钥

    首先得写一个中间件,这个中间件对参数进行验证。

    class AppMiddleware implements MiddlewareInterface
    {
        /**  接口sign 验证
         * @param Request $request
         * @param \Closure $next
         * @param bool $force
         * @return mixed
         */
        public function handle(Request $request, \Closure $next, bool $force = true)
        {
            // 1、获取参数
            $param = $request->param();
    
            // 判断sign time_stamp 是否存在
            if(empty($param['sign']) || empty($param['time_stamp'])) return json(’密钥错误‘);
    
            // 时间判断 大于3600s返回 系统错误
    
            $time_limit = 3600;
            if(abs((int)$param['time_stamp'] - time()) > $time_limit){
                Log::error('时间超时'.time().' param= '.json_encode($param));
            }
    
    //        try {
    //            $app_api_key = env('app.api_app_key');
    //        } catch (AuthException $e) {
    //            return json(’密钥错误‘);
    //        }
    
            // 2、加入私钥并排序参数
            $app_api_key = ‘asdfasdfasdfas;   //填你刚刚生成的密钥
            if(is_null($app_api_key)){
                return  json(’密钥错误‘);
            }
            $param['api_key'] = $app_api_key;// 加入私钥
    
            // 3、过滤不需要的参数
            ksort($param); // 对数组的键(字母)进行降序排序
    
            $str = '';
            foreach ($param as $key => $val) {
                if ($key == 'sign') continue;// 符合以下条件的都不进行拼接
                $str = $str .(string)$val;// 拼接数组的值[数组的键(字母)进行降序排序]
            }
    
            // 4、生成签名
            $sign = md5($str);
    
            // 判断sign
            if(empty($sign) || $param['sign'] != $sign){
                Log::error('接口错误 sign=  '.$sign.' param= '.json_encode($param));
            }
            return $next($request);
        }
    }
    
    展开全文
  • /// 非对称加密算法的优点是密钥管理很方便,缺点是速度慢。 /// </summary> public class RsaEncrypt { /// <summary> /// 获取加密/解密对 /// 给你一个,是无法推算出另外一个的 /// /// ...
  • 简单操作只需10秒破解PDF加密文件

    万次阅读 多人点赞 2016-05-08 19:03:07
    简单操作只需10秒破解PDF加密文件 破解PDF加密文件,如何破解PDF密码呢,破解加密的PDF文件 【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/51187240 从网上下载的PDF文件,由于...

    简单操作只需10秒破解PDF加密文件

        【尊重 原创,转载请注明出处 】http://blog.csdn.net/guyuealian/article/details/51345950
         如何破解PDF加密文件,如何破解PDF密码呢,破解 加密的 PDF文件
         从网上下载的PDF文件,由于版权的问题,作者经常会加密禁止读者复制修改等权限,如下面的PDF文档,用Adobe pdf Reader打开时,会显示“已加密”的字样,虽然可以阅读,但不能修改和标记。
         为了解决这个问题,可以采用绕过破解密码这一关,即将原文件另存为另一份文件,并将文件中的密码去掉。PS :用 A dobe pdf Reader直接转存还是会保留密码的,这里使用PDF editor绕道来去掉密码,下载地址: http://download.csdn.net/detail/guyuealian/9513690
    【1】运行PDF Edit.exe,然后“打开”你要破解密码的PDF文件。
     
     
    【2】文档-->导出页面
    【2】如图设置好了,点击“确定”即可
    【2】再次打开,就不会显示“已加密”,而且还可以正常的复制和添加标记。
     
     
    展开全文
  • /// <summary> /// 不可逆加密 ... /// MD5加密,和动网上的16/32位MD5加密结果相同, /// 使用的UTF8编码 /// </summary> /// <param name="source">待加密字串</param>
  • Java实现DES加密解密

    万次阅读 多人点赞 2018-11-09 16:27:01
    DES(Data Encryption Standard)是一种对称加密算法,所谓对称加密就是加密和解密都是使用同一个密钥。 加密原理: DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的...

    DES(Data Encryption Standard)是一种对称加密算法,所谓对称加密就是加密和解密都是使用同一个密钥

    加密原理:

    DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用 Feistel 技术,将其中加密的文本块分成两半,实现了子密钥对其中一半应用循环功能,然后将输出与另一半进行"异或"运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。

    不过,DES已可破解,所以针对保密级别特别高的数据推荐使用非对称加密算法。

    下面介绍基于Java实现的DES加解密方法,该方法同样适用于Android平台,使用的是JDK1.8。

    public class DESUtil {
    
        /**
         * 偏移变量,固定占8位字节
         */
        private final static String IV_PARAMETER = "12345678";
        /**
         * 密钥算法
         */
        private static final String ALGORITHM = "DES";
        /**
         * 加密/解密算法-工作模式-填充模式
         */
        private static final String CIPHER_ALGORITHM = "DES/CBC/PKCS5Padding";
        /**
         * 默认编码
         */
        private static final String CHARSET = "utf-8";
    
        /**
         * 生成key
         *
         * @param password
         * @return
         * @throws Exception
         */
        private static Key generateKey(String password) throws Exception {
            DESKeySpec dks = new DESKeySpec(password.getBytes(CHARSET));
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
            return keyFactory.generateSecret(dks);
        }
    
    
        /**
         * DES加密字符串
         *
         * @param password 加密密码,长度不能够小于8位
         * @param data 待加密字符串
         * @return 加密后内容
         */
        public static String encrypt(String password, String data) {
            if (password== null || password.length() < 8) {
                throw new RuntimeException("加密失败,key不能小于8位");
            }
            if (data == null)
                return null;
            try {
                Key secretKey = generateKey(password);
                Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
                IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
                cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
                byte[] bytes = cipher.doFinal(data.getBytes(CHARSET));
    
                //JDK1.8及以上可直接使用Base64,JDK1.7及以下可以使用BASE64Encoder
                //Android平台可以使用android.util.Base64
                return new String(Base64.getEncoder().encode(bytes));
    
            } catch (Exception e) {
                e.printStackTrace();
                return data;
            }
        }
    
        /**
         * DES解密字符串
         *
         * @param password 解密密码,长度不能够小于8位
         * @param data 待解密字符串
         * @return 解密后内容
         */
        public static String decrypt(String password, String data) {
            if (password== null || password.length() < 8) {
                throw new RuntimeException("加密失败,key不能小于8位");
            }
            if (data == null)
                return null;
            try {
                Key secretKey = generateKey(password);
                Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
                IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
                cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
                return new String(cipher.doFinal(Base64.getDecoder().decode(data.getBytes(CHARSET))), CHARSET);
            } catch (Exception e) {
                e.printStackTrace();
                return data;
            }
        }
    
        /**
         * DES加密文件
         *
         * @param srcFile  待加密的文件
         * @param destFile 加密后存放的文件路径
         * @return 加密后的文件路径
         */
        public static String encryptFile(String password, String srcFile, String destFile) {
    
            if (password== null || password.length() < 8) {
                throw new RuntimeException("加密失败,key不能小于8位");
            }
            try {
                IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
                Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
                cipher.init(Cipher.ENCRYPT_MODE, generateKey(key), iv);
                InputStream is = new FileInputStream(srcFile);
                OutputStream out = new FileOutputStream(destFile);
                CipherInputStream cis = new CipherInputStream(is, cipher);
                byte[] buffer = new byte[1024];
                int r;
                while ((r = cis.read(buffer)) > 0) {
                    out.write(buffer, 0, r);
                }
                cis.close();
                is.close();
                out.close();
                return destFile;
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            return null;
        }
    
        /**
         * DES解密文件
         *
         * @param srcFile  已加密的文件
         * @param destFile 解密后存放的文件路径
         * @return 解密后的文件路径
         */
        public static String decryptFile(String password, String srcFile, String destFile) {
            if (password== null || password.length() < 8) {
                throw new RuntimeException("加密失败,key不能小于8位");
            }
            try {
                File file = new File(destFile);
                if (!file.exists()) {
                    file.getParentFile().mkdirs();
                    file.createNewFile();
                }
                IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
                Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
                cipher.init(Cipher.DECRYPT_MODE, generateKey(key), iv);
                InputStream is = new FileInputStream(srcFile);
                OutputStream out = new FileOutputStream(destFile);
                CipherOutputStream cos = new CipherOutputStream(out, cipher);
                byte[] buffer = new byte[1024];
                int r;
                while ((r = is.read(buffer)) >= 0) {
                    cos.write(buffer, 0, r);
                }
                cos.close();
                is.close();
                out.close();
                return destFile;
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            return null;
        }
    }
    

     

    展开全文
  • 常用js数据加密

    万次阅读 2019-11-21 11:20:27
    常用js数据加密 原生js已经支持base64加密及解密 //加密 window.btoa(this.shop) //解密 window.atob(this.shop)

    博客地址:http://www.globm.top/blog/1/detail/39
    常用js数据加密

    1. 原生js已经支持base64加密及解密
    //加密
    window.btoa(this.shop)
    
    //解密
    window.atob(this.shop)
    

    但是,window.btoa并不支持中文加密,可以使用曲线救国的方法

    //加密
    window.btoa(encodeURIComponent(this.company_name))
    //解密
    decodeURIComponent(window.atob(this.company_name))
    

    不过,使用encode中文转码在编译真的是‘曲线救国了’!

    1. md5加密

    MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致

    常用js md5库
    https://github.com/blueimp/JavaScript-MD5

    npm install crypto-js
    
    //使用crypto
    //md5.js
    import crypto from 'crypto';
    export default ({
    //将对象以‘键名=键值’方式存储到数组中,再以‘&’连接并加密,
      getSign(params){
        let objsort = this.objKeySort(params);
        let arr = [];
        for (let i in objsort) {
          arr.push((i + "=" + objsort[i]));
        }
        var  md5 = crypto.createHash("md5");
        md5.update(arr.join("&")); //需要加密的密码
        return md5.digest('hex').toUpperCase();  //password 加密完的密码
      },
      //排序的函数
      objKeySort(obj) {
        //先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
        var newkey = Object.keys(obj).sort();
        var newObj = {};//创建一个新的对象,用于存放排好序的键值对
        for (var i = 0; i < newkey.length; i++) {//遍历newkey数组
          newObj[newkey[i]] = obj[newkey[i]];//向新创建的对象中按照排好的顺序依次增加键值对
        }
        return newObj;//返回排好序的新对象
      }
    })
    
    展开全文
  • AES加密过程详解

    万次阅读 多人点赞 2018-07-03 16:55:58
    AES加密过程涉及到4种操作,分别是字节替代、行移位、列混淆和轮密钥加。解密过程分别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。加解密中每轮的密钥分别由初始密钥扩展得到。...
  • AES 加密算法的原理详解

    万次阅读 多人点赞 2018-07-23 22:18:49
    高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: 下面简单介绍下各个部分的....
  • Java-MD5加密

    万次阅读 2021-01-19 08:57:37
    加密特点:一旦加密之后 ,就不可解密 光是MD5加密 还不够安全 ,这时候就要添加盐值: 盐值作用:让你的密码更加安全, MD5:支持加密次数 MD5加密三个概念: MD5常规加密,为了让你的密码更加安全,MD5加密还要加...
  • springboot对数据库密码加密

    万次阅读 多人点赞 2018-08-31 16:39:17
    开发的同学们都知道,例如项目依赖的信息,数据库信息一般是保存在配置文件中,而且都是明文,因此需要进行加密处理,今天在这里介绍下jasypt集成springboot加密的配置。 首先,这些都是建立在你的springboot项目是...
  • 对称加密非对称加密不可逆加密算法 根据密钥类型不同可以将现代密码技术分为两类:对称加密算法(私钥密码体系)和非对称加密算法(公钥密码体系)。 1对称加密算法 原理 对称加密算法中,数据加密和解密采用的都是...
  • RSA加密与解密(Java实现)

    万次阅读 多人点赞 2018-10-17 10:22:52
    RSA是一种非对称加密算法。现在,很多登陆表单的密码的都采用RSA加密,例如京东中的登陆使用公钥对密码进行加密。 Base64编码 apache.commons-codex包提供了许多编码格式转换,例如Base64。 以下为Base64编码表...
  • java压缩包加密上传,解密下载

    万次阅读 2021-08-28 09:05:44
    java压缩包加密上传,解密下载 业务场景 供应商上传投标文件需要进行加密处理,通过链接下载时下载的时加密的文件,而通过系统内访问接口下载时,下载的是解密好的文件。 问题解决思路 1. 首先配置三个保存文件的...
  • 配置文件加密解密

    万次阅读 2020-10-10 17:04:26
    配置文件中存放着许多重要的东西,比如数据库账号密码什么的,需要对这些内容进行加密储存。 使用到的是jasypt 1.添加Maven依赖 <dependency> <groupId>com.github.ulisesbocchio</groupId> <...
  • Sqlite数据库加密加密

    千次阅读 2019-05-10 15:06:38
    Sqlite数据库加密。(C#连接加密的Sqlite数据库的方法) 参考地址[1]: https://www.jb51.net/article/120279.htm sqlite破解安装包下载: https://download.csdn.net/download/yinchoushi8780/11170781 一、数据库...
  • 对称加密和非对称加密的区别

    万次阅读 多人点赞 2018-08-13 17:53:37
    对称加密算法: 密钥较短,破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,且对计算机性能要求也没有那么高. 优点: 算法公开、计算量小...
  • 加密种类: 1. 不可逆加密:【Hash加密算法/散列算法/摘要算法】 一旦加密就不能反向解密得到密码原文,一般用来加密用户密码,app的服务器端数据库里一般存储的也都是加密后的用户密码。 在数据传输的过程中,首先把...
  • 前端时间有研究多款加密芯片,加密算法实现,以及破解可能,也有一些个人的观点,仅供参考; 一,加密芯片的来源及工作流程: 市面上的加密芯片,基本都是基于某款单片机,使用I2C或SPI等通讯,使用复杂加密算法...
  • RSA加密

    千次阅读 2019-06-27 11:56:11
    RSA是一种非对称加密算法,1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的,因此以三人姓氏的首字母命名了该非对称加密算法,RSA算法。...
  • python密码加密

    万次阅读 2018-11-06 11:24:01
    推荐2种:sha1和md5,不可逆,sha1生成后40位,相对安全,但速度慢,md5生成后32位,速度快.加密后特点:数字加小写英文字母,简单密码容易破解...生成md5 32位加密串 """ import hashlib str1 = 'hello world!' ret = hash...
  • 双向加密

    万次阅读 2019-03-27 19:27:26
    加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项加密选项...
  • 同态加密

    万次阅读 2019-05-15 09:19:42
    对经过同态加密的数据进行处理得到一个输出,将这一输出进行解密,其结果与用同一方法处理未加密的原始数据得到的输出结果是一样的。 1.同态加密的相关概念 同态加密是一种无须对加密数据进行提前解密就可以执行...
  • 如何使用加密狗加密自己程序

    万次阅读 2019-06-10 16:09:34
    使用加密狗进行程序的加密保护是非常成熟的加密方案。目前市面上比较常见的加密锁:深思的精锐5,威步,safenet。国内比较老牌的加密锁公司是深思,深思的锁从精锐4,到现在的精锐5,都是比较不错的产品,加密安全性...
  • RSA加密的原理——为什么被公钥加密的可以被私钥解密? 目录 一,RSA 数学理论基础 二,RSA实现原理 三,RSA加密的过程 四,参考文献 引言 在密码学最开始,都是使用的普通加密模式 A 用加密...
  • RSA加密和DH加密

    千次阅读 2019-05-29 17:36:02
    对称加密:双方使用同一种加密规则对信息加密、解密(加解密速度快、效率高,适合大量数据,常见的有DES、AES、RC5、Blowfish、IDEA)。 非对称加密:乙方生成公钥、私钥这2把密钥。公钥公开,任何人都可以获取。...
  • Shiro密码加密 盐值加密

    千次阅读 2020-05-20 11:15:20
    1.为什么要盐值加密 对于同一密码,同一加密算法会产生相同的hash值。这样,当用户进行身份验证时,对用户输入的明文密码应用相同的hash加密算法,得出一个hash值,然后使用该hash值和之前存储好的密文值进行对照,...
  • 对称加密&非对称加密&混合加密

    千次阅读 2018-11-09 10:23:13
    对称加密&amp;amp;amp;amp;amp;amp;amp;非对称加密&amp;amp;amp;amp;amp;amp;amp;混合加密写于前iOS中常在哪些场景应用到写一个系列本文概要对称加密(Symmetric Cryptography)非对称加密(ASymmetric ...
  • AES256位加密

    万次阅读 2019-06-18 08:21:37
    为了保证数据的安全性,特别是客户的账号密码,加密是非常重要的,今天就是想分享一下学习到的一个256位AES加密算法。 方法如下: public static string Encrypt(string toEncrypt) { // 256-AES key byte[] ...
  • VC++软件授权加密与管控(附demo)

    万次阅读 多人点赞 2020-10-04 21:38:46
    根据请求文件生成授权加密文件,支持授权到期时间,与授权次数,或者两者并用 3.软件加载授权加密文件使其生效! 功能:绑定了电脑,换电脑不能使用,到期不能使用,到次数不能使用! //收集硬件信息,生成...
  • 浅谈常见的七种加密算法及实现

    万次阅读 多人点赞 2018-09-10 18:38:26
    数字签名、信息加密 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 签名加密算法 来达到业务...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,113,908
精华内容 445,563
关键字:

加密