精华内容
下载资源
问答
  • 2、有效期的PDF文件,只能够在全功能的PDF软件环境下才能够阅读。 如电脑版本的adobe reader 或者 FoxitReader! 不能够打印、复制等操作。 可以PDF设置打开密码。 3、在手机等移动终端或者未安装软件的环境下...
  • 最近封装算法的SDK客户使用,领导要求加一个通过读取系统时间来限制客户使用期的功能,于是拙劣的加了一个读取系统时间,并进行MD5加密,与提前写好的MD5库文件进行比对,以验证有效期。设置有效期,加密并保存成...

        最近封装算法的SDK给客户使用,领导要求加一个通过读取系统时间来限制客户使用期的功能,于是拙劣的加了一个读取系统时间,并进行MD5加密,与提前写好的MD5库文件进行比对,以验证有效期。


    设置有效期,加密并保存成二进制文件:

    	fstream f;
    
    	f.open("configFile", ofstream::app | ios::binary | ofstream::out);
    
    	if (!f.is_open())
    	{
    		cerr << "file open failed!" << endl;
    		getchar();
    		exit(0);
    	}
    	for (int i = 20180403; i < 20180431; ++i)//有效期自己设定
    	{
    		string s = to_string(i);
    		unsigned char encrypt[9] = { 0 };
    		
    		for (int j = 0; j < s.size(); ++j)
    		{
    			encrypt[j] = (unsigned char)s[j];
    		}
    
    		encrypt[8] = '\0';
    
     		unsigned char decrypt[16];
     		memset(decrypt, 0, sizeof(decrypt)*sizeof(unsigned char));
     
     		MD5Init(&md5);
    		MD5Update(&md5, encrypt, strlen((char*)encrypt));
    		MD5Final(&md5, decrypt);
    
    		printf("\n加密前:%s\n加密后32位:", encrypt);
    		for (int ii = 0; ii < 16; ii++)
    		{
    			printf("%02x", decrypt[ii]);	
    			f.write((char*)&decrypt[ii], sizeof(decrypt[ii]));
    		}				
    	}
    
    	f.close();




    读取系统时间并比对:

    #ifdef CHECK_CONFIGFILE
    			MD5        md5;
    			time_t	   t = time(0);
    			char	   tmp[9];
    
    			strftime(tmp, sizeof(tmp), "%Y%m%d", localtime(&t));
    
    			unsigned char decrypt[16];
    			memset(decrypt, 0, sizeof(decrypt) * sizeof(unsigned char));
    			
    			MD5Init(&md5);
    			MD5Update(&md5, (unsigned char*)tmp, strlen((char*)tmp));
    			MD5Final(&md5, decrypt);
    
    			std::fstream f;
    			f.open("configFile", std::ifstream::in | std::ios::binary);
    
    			if (!f.is_open())
    			{
    				std::cerr << "configFile open failed!" << std::endl;
    				getchar();
    				return FALSE;
    			}
    
    			bool validCode = false;
    
    			for (int ii = 0; ; ++ii)
    			{
    				unsigned char decrypt0[16] = { 0 };
    
    				if (f.peek() == EOF)
    				{
    					break;
    				}
    				
    				for (int i = 0; i < 16; i++)
    				{
    					f.read((char*)&decrypt0[i], sizeof(decrypt0[i]));
    					//printf("%02x", decrypt0[i]);
    				}
    							
    				if (0 == strcmpu(decrypt0, decrypt, 16))
    				{
    					validCode = true;
    					break;
    				}
    			}
    
    			f.close();
    
    			if (!validCode)
    			{
    				std::cout << "Detection DLL 超过使用期限";
    				return FALSE;
    			}			
    #endif


    展开全文
  • 简单设置软件有效期的方法

    千次阅读 2017-07-25 14:11:41
    我们后面判断时间带来了很大方便 .   第三步 两个方案 方案一 如何控制软件的有效日期方案 1 简单粗暴法 , 该方法直接在软件里写死到哪个日期后就不可用了 , 当然 , 如果你将日期强制改为这个日期...

    第一步  弄清Linuxgmtimelocaltime的区别

    前段时间用到,写了段小测试代码,个人觉得足够清楚的表明了二者的区别了,还是不明白的话,就看看APUE里面的章节吧。

    #include <time.h>
    #include <stdio.h>

    int main(int argc, char **argv)
    {
        time_t tmpcal_ptr = {0};
        struct tm *tmp_ptr = NULL;

        tmpcal_ptr = time(NULL);//获取系统时间,单位为秒
        printf("tmpcal_ptr=%d\n", tmpcal_ptr);   

        tmp_ptr = gmtime(&tmpcal_ptr);//转换成tm类型的结构体;
        printf("after gmtime, the time is:\n%d:%d:%d", tmp_ptr->tm_hour, tmp_ptr->tm_min, tmp_ptr->tm_sec);

        tmp_ptr = localtime(&tmpcal_ptr); //转换成tm类型的结构体;
        printf("after localtime, the time is:\n%d:%d:%d", tmp_ptr->tm_hour, tmp_ptr->tm_min, tmp_ptr->tm_sec);

    return 0;
    }

    localtime是将时区考虑在内了,转出的当前时区的时间。但是注意,有些嵌入式设备上被裁减过的系统,时区没有被设置好,导致二者转出来的时间都是0时区的。

     

    第二步 tm这个结构体的定义?

    /*

     * Similar to the struct tm in userspace <time.h>, but it needs to be here so

     * that the kernel source is self contained.

     */

    struct tm {

    /*

     * the number of seconds after the minute, normally in the range

     * 0 to 59, but can be up to 60 to allow for leap seconds

     */

    int tm_sec;

    /* the number of minutes after the hour, in the range 0 to 59*/

    int tm_min;

    /* the number of hours past midnight, in the range 0 to 23 */

    int tm_hour;

    /* the day of the month, in the range 1 to 31 */

    int tm_mday;

    /* the number of months since January, in the range 0 to 11 */ //==>我们的月数需要加1

    int tm_mon;

    /* the number of years since 1900 *//我们的年数是从1900年开始计算的,因此,2017年的话,需要设置为tm_year + 117

    long tm_year;

    /* the number of days since Sunday, in the range 0 to 6 */

    int tm_wday;

    /* the number of days since January 1, in the range 0 to 365 */

    int tm_yday;

    };

    从上面这些我们可以看出,年月日我们都可以获取到,这个相当给力,给我们后面判断时间带来了很大方便.

     

    第三步 两个方案

    方案一 如何控制软件的有效日期方案1

    简单粗暴法,该方法直接在软件里写死到哪个日期后就不可用了,当然,如果你将日期强制改为这个日期之前,也是可以用的,不过软件发布后,用户不会将系统时间设置为过去的任何日子,因此,如果B2B的话可以这样做,因为下一步B2C的时候,C用的肯定是正确的系统时间(这里只考虑移动终端哈).欢迎各位大神前来拍砖讨论.

            time_t tmpcal_ptr = {0};

            struct tm *tmp_ptr = NULL;

            tmpcal_ptr = time(NULL);

            ALOGD("The time is %d", tmpcal_ptr);

            tmp_ptr = localtime(&tmpcal_ptr);

            ALOGD("after localtime, the time is:%d:%d:%d, %d:%d:%d", tmp_ptr->tm_hour, tmp_ptr->tm_min, tmp_ptr->tm_sec, tmp_ptr->tm_mday, tmp_ptr->tm_mon + 1, tmp_ptr->tm_year + 1900);

            int year_now = tmp_ptr->tm_year + 1900;

            int month_now = tmp_ptr->tm_mon + 1;

            int day_now = tmp_ptr->tm_mday;

            ALOGD("The time is %d - %d - %d", year_now, month_now, day_now);

            ALOGD("Checking license ......");

            if(year_now > 2017 || month_now >= 8 && day_now >= 26){

                ALOGE("The license EXPIRED ");

                return;//如果逾期,我们就不再进行初始化,这样功能就无法正常使用了.

            }

            ALOGD("The TS color enhance license's state is OK.");

    方案二 如何控制软件的有效日期方案2

    将第一次加载此功能的时间设置为初始时间,然后将该时间写入到/sdcard/Android/下面(希望有大神能指点将这个时间备份文件放在哪里更优雅的建议),这样就完成了初始时间的保存.

    每次在打开软件前,均去/sdcard/Android下面检查时间文件是否存在:如果存在,则读取首次加载此功能的时间,否则将当前时间当做初次加载该功能的时间保存到/sdcard/Android.

    然后就可以将本次开启该功能的时间减去之前记录的时间,即可判断该功能是否应该正常开启.

     

    其它:如果计算函数耗时,我们倒是可以使用gettimeofday()函数,它能精确到微秒级.

     

    References:

    1.这个blog主要是讲述gmtimelocaltime的区别

    http://www.linuxidc.com/Linux/2013-04/82670.htm

    2.这个blog写的大而全,没重点

    http://www.cnblogs.com/sun-frederick/p/4772535.html

    3.这个blog主要讲了如何将1970年以来的秒数转换为年月日

    我认为应尽量使用库函数来完成,这样能够减少不稳定性,不知道这样思考是否正确,欢迎大神拍砖

    http://www.cnblogs.com/lebronjames/archive/2010/09/06/1819359.html

    展开全文
  • Linux修改用户密码有效期

    千次阅读 2018-01-31 16:41:00
    但有时要求90天就过期,在这种严柯条件下我们有可能想某个或某些用户开设后门,延长其密码有效期。   一、用户密码配置文件 1.1 /etc/login.defs 密码有效期配置文件 PASS_MAX_DAYS--新建用户密码有效期,默认...

    linux默认用户的密码是永不过期的,但是出于安全考虑在企业环境中一般会要求设置过期日期;但有时要求90天就过期,在这种严柯条件下我们有可能想给某个或某些用户开设后门,延长其密码有效期。

     

    一、用户密码配置文件

    1.1 /etc/login.defs

    密码有效期配置文件

    PASS_MAX_DAYS--新建用户密码有效期,默认99999表示永不过期
    PASS_MIN_DAYS--新建用户密码可修改的最短日期,默认为0,表示随时可以修改
    PASS_MIN_LEN--新建用户密码最短长度
    PASS_WARN_AGE--密码过期前开始警告的天数

     

    1.2 /etc/pam.d/system-auth

    口令复杂度配置文件

    retry--密码可尝试次数

    minlen--密码最短长度

    lcredit--小写字母最少个数

    ucredit--大写字母最少个数

    dcredit--数字最少个数

    ocredit--特殊字符最少个数

    minclass--以上四种类型中最少要求有几种

    示例:

    password    requisite     pam_cracklib.so try_first_pass retry=3 minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 difok=3 minclass=3

     

    二、修改指定用户过期日期

     2.1 查看用户密码过期情况

    chage -l username

    以上是我主机ls用户的密码过期情况

    Last password change--最近一次密码修改时间

    Password expires--密码过期日期

    Password inactive--密码失效日期

    Account expires--账户过期日期

    Minimum number of days between password change--两次修改密码之间相距的最小天数

    Maximum number of days between password change--两次修改密码之间相距的最大天数

    Number of days of warning before password expires--在密码过期之前警告的天数

     

    2.2 修改密码过期日期

    在上图可见ls用户的密码有效期为90天,我们这里将之修改为10000(如果天数大于或等于99999则表示永不过期)

    chage -M 10000 username

    就观查来看chage -M应该只是修改了/etc/shadow中的密码有效期天数,所以用root直接到/etc/shadow修改有效天数应访也是等效的

    (不过/etc/shadow一般默认没有写权限,要手动编缉需要添加写权限才可修改;这也可以反推出,没有写权限不能修改文件内容只是针对用户态而言)

     

    参考:

    http://man.linuxde.net/chage

    http://www.linuxidc.com/Linux/2010-12/30621.htm

    展开全文
  • 通过 MinIO客户端 管理存储桶策略的方式实现文件链接永久有效 1.下载MinIO Client 采用 Docker 方式 安装 拉取Docker稳定版镜像 docker pull minio/mc 2.运行MinIO Client docker run -it --entrypoint=/bin/sh ...

    前言

    minio分享文件的链接,最多支持分享七天
    通过 MinIO客户端 管理存储桶策略的方式实现文件链接永久有效

    1.下载MinIO Client

    采用 Docker 方式 安装

    拉取Docker稳定版镜像

    docker pull minio/mc
    

    2.运行MinIO Client

    docker run -it --entrypoint=/bin/sh minio/mc
    

    成功提示
    在这里插入图片描述

    3.添加一个云存储服务

    mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> [--api API-SIGNATURE]
    

    示例-MinIO云存储
    从MinIO服务获得URL、access key和secret key。

    mc config host add minio http://192.168.1.51 BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 --api s3v4
    

    别名就是给你的云存储服务起了一个短点的外号。S3 endpoint,access key和secret key是你的云存储服务提供的。API签名是可选参数,默认情况下,它被设置为"S3v4"。

    4.验证

    查询所有的存储桶

    mc ls minio
    

    ps:这里的 minio 是刚刚取的别名

    5.policy命令 - 管理存储桶策略

    通过 mc policy 命令 获取 policy 相关的所有命令

    mc policy
    

    在这里插入图片描述
    查看存储桶或路径策略

    mc policy get minio/mybucket/myphotos/2020/
    

    设置存储桶或路径策略为 download

    mc policy set download play/mybucket/myphotos/2020/
    

    download 后面 跟存储桶或路径

    minio地址 + 文件路径 就成为了永久可访问的链接,注意如果直接在控制台中复制url,其中的minio要去掉。

    注意: 这里强烈建议设置路径的策略为 download 这样 所属存储桶的策略就变为了 custom
    如果直接将 bucket 设置为 download 那么就可以进入到minio客户端,虽然只能看到 设置了相应策略的 bocket ,但是匿名者可以在其中随意的创建与删除文件!

    参考地址 MinIO 官网

    展开全文
  • //若if命中,返回一个有效期为0的cookie浏览器,浏览器就会把这个cookie删除掉 response . addCookie ( ck ) ; return ; } } } } } 到这里,session共享,以及session的有效期都解决掉了。...
  • EXE文件加壳软件可加期限和次数

    热门讨论 2012-06-16 00:44:03
    EXE文件加壳 加EXE文件的使用期限 次数 设置试用 等保护自己的利益
  • Java面试题大全(2020版)

    万次阅读 多人点赞 2019-11-26 11:59:06
    基于你的collection的大小,也许向HashMap中添加元素会更快,将map换为TreeMap进行有序key的遍历。 23. 说一下 HashMap 的实现原理? HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选...
  • 2021年前端面试题及答案

    万次阅读 多人点赞 2020-02-11 19:29:34
    有效的,将文件上传目录直接设置为不可执行,对于Linux而言,撤销其目录的'x'权限;实际中很多大型网站的上传应用都会放置在独立的存储上作为静态文件处理,一是方便使用缓存加速降低能耗,二是杜绝了脚本执行的...
  • MFC生成的exe如何添加使用期限

    千次阅读 2017-06-19 11:53:14
    代码功能:为生成exe程序添加试用时限 参数:strSystime : 用于获取当前系统的时间  strDeadline : 设置软件的截止时间 strSWCreateTime : 软件的生成时间,主要用于防破解 额外说明:这段...
  • MySQL 面试题

    万次阅读 多人点赞 2019-09-02 16:03:33
    重点的题目添加了【重点】前缀。 索引。 锁。 事务和隔离级别。 因为 MySQL 还会有部分内容和运维相关度比较高,所以本文我们分成两部分【开发】【运维】两部分。 对于【开发】部分,我们需要掌握。 对于【运维...
  • [iOS]PKPass文件制作及添加到Wallet

    千次阅读 2017-03-07 14:12:23
    1、什么是PKPass文件?PKPass 是Apple定义的一套针对商家消费券、优惠券、火车机票等票据格式类文件。包含:图标icon、缩略图thumbnail和logo外最重要的就是pass.json、manifest.json和signature等文件的一个压缩包2...
  • pycharm安装

    千次阅读 2018-11-30 18:36:04
    有效期到2099年12月31日,适用于JetBrains的所有开发工具(如:IDEA、webstorm、phpstorm、pycharm等等) 下面以Pycharm为例: 第一步:下载补丁文件 如果是2017.2以上版本的,需要JetbrainsCrack-2.6.6及...
  • 前端面试锦集

    千次阅读 多人点赞 2019-07-20 13:41:45
    //post请求一定要添加请求头才行不然会报错 xhr . setRequestHeader ( "Content-type" , "application/x-www-form-urlencoded" ) ; xhr . open ( 'post' , '02.post.php' ) ; xhr . send ( 'name=fox&age=18...
  • 前端面试题

    万次阅读 多人点赞 2019-08-08 11:49:01
    每个HTML文件里开头都有个很重要的东西,Doctype,知道这是干什么的吗? 21 Quirks模式是什么?它和Standards模式有什么区别 21 div+css的布局较table布局有什么优点? 22 img的alt与title有何异同? strong与em的...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    软件生命周期: 就个人价值而言,一是我们职业发展方向 如何尽量多的发现缺陷? 沟通 在测试前期与开发沟通 确认测试重点 确认测试的优先级 了解开发人员技术和业务背景 业务水平 技术水平 代码质量 人员流动性 在...
  • C# 程序添加试用期限

    千次阅读 2020-04-23 08:52:48
    // // 创建一个 StreamReader 的实例来读取文件 ,using 语句也能关闭 StreamReader using (System.IO.StreamReader sr = new System.IO.StreamReader(filePath)) { // // 从文件读取并显示行,直到文件的末尾 while...
  • 最近项目要求增加验证码、密码有效期、限制用户登录之类的功能,于是花了三天去看CAS源码和耶鲁的官网User-manual。 基于CAS 3.3.5,Tomcat 6.29,JDK 1.6 以下部分红色表示新增,蓝色表示修改,绿色表
  • 当前大多数的ssl证书是收费的,我所知道的只有腾讯云可以申请到1年有效期的二级域名使用的ssl证书,下面是申请的流程,需要一个腾讯云完成实名认证的账号    1. 进入控制台--&gt;SSL证书管理--&gt;证书...
  • linux 下如何添加用户、权限

    万次阅读 2019-06-07 13:28:18
    linux 下如何添加用户、权限 转载点击访问 useradd –d /usr/sam -m sam 此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录)。 假设当前用户是...
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    // TODO: 在此处添加代码以启动应用程序 // Console.WriteLine("请键入你的姓名:"); Console.ReadLine(); Console.WriteLine("欢迎!"); } } } (4) 按CTRL+F5键,运行程序,如右图,和1.2.1节...
  • Linux如何添加用户(组)及下放权限

    千次阅读 2019-07-07 20:12:51
    Linux如何添加用户(组)及下放权限 1.新建用户(组) ①用户 新建用户需要通过指令useradd来实现。 useradd的一些基本用法如下: useradd username 新建一个用户 useradd -u uid username 指定用户的uid useradd...
  • Zxing系列之图片添加二维码水印教程

    千次阅读 多人点赞 2019-06-14 11:50:20
    继之前博客PDF添加二维码水印教程:https://smilenicky.blog.csdn.net/article/details/91655064, 本博客介绍一下用jdk awt实现图片加文字水印和图片水印的方法
  • 打开tomcat的conf目录下的web.xml文件 在</web-app>中加入以下代码 <filter> <filter-name>ExpiresFilter</filter-name> <filter-class>org.apache.catalina.filters....
  • 一、用户信息文件 : /etc/passwd 首先我们可以使用命令man 5 passwd查看以下 passwd 文件的格式 我们看出 passwd 文件的格式是由七个字段组成,每个字段通过冒号分隔,并且每一行代表一个用户。下面我们将通过...
  • SpringBoot 项目 添加 redis配置

    千次阅读 2021-06-01 22:12:28
    /** * 10分钟有效期的缓存名 */ public static final String CACHE_NAME_MINUTES_10 = CACHE_NAMES_PREFIX + "minutes-10"; /** * 30分钟有效期的缓存名 */ public static final String CACHE_NAME_MINUTES_30 = ...
  • 网站添加ssl证书(https)

    千次阅读 2018-06-17 17:29:58
    环境: centos 7, nginx nginx 安装ssl模块 ...安装nginx时,使用的是默认的安装路径,即 /usr/local/nginx, nginx 可执行文件在 /usr/local/nginx/sbin/下面。 现在安装ssl模块: 1、 生成文...
  • 向jre中添加安全证书

    千次阅读 2017-10-21 20:55:03
    keytool JAVA是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,...-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中 -import 将已签名数字证书导入密钥库 keytool -import -...
  • 一. 介绍和用户相关的系统文件  和用户和用户组相关的信息都... 这个文件是用户管理工作涉及的最重要的一个文件,linux中每一个用户都在/etc/passwd文件中有一个记录。它的内容可以用下面的命令查看: [root@lo
  • 主要是通过工具修改 ... 简单说就是下载一个工具, 然后用工具中的方法就可以动态添加hostname和ip映射 jar包下载地址 https://mvnrepository.com/artifact/com.alibaba/dns-cache-man...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 85,372
精华内容 34,148
关键字:

如何给文件添加有效期