DES加密解密算法C++实现

DES加密算法并不难,是由一些简单的变换得来的,难的是要有足够的耐心。蒟蒻并不想说自己用了多久才把代码写好的。


代码:
我真的太难了QAQ
#include<iostream>
using namespace std; int jiami(){ // 明文
int mingwen[]; cout<<"请输入16位十六进制的明文:";
string kk;
cin>>kk;
int len=kk.length(); while(len!=){
cout<<"请重新输入16位十六进制的明文:";
cin>>kk;
len=kk.length();
} int jishu=;
for(int i=;i<;i++){
int a;
if(kk[i]>=''&&kk[i]<='')
a=kk[i]-'';
else
a=kk[i]-'A'+; int n[]={};
int f=;
while(a){
n[f]=a%;
a=a/;
f++;
}
mingwen[jishu*]=n[];
mingwen[jishu*+]=n[];
mingwen[jishu*+]=n[];
mingwen[jishu*+]=n[];
jishu++;
} //初始置换IP
int IP[]={, , , , , , , ,
, , , , , , , ,
, , , , , , , ,
, , , , , , , ,
, , , , , , , ,
, , , , , , , ,
, , , , , , , ,
, , , , , , , }; // 选择运算E 32位明文扩充为48位
int E[]={ , , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , }; //64位秘钥 0123456789ABCDEF 56位的秘钥+8位校验码
int miyao[];
cout<<"请输入16位十六进制的秘钥:";
string k_2;
cin>>k_2;
int len_2=k_2.length(); while(len_2!=){
cout<<"请重新输入16位十六进制的秘钥:";
cin>>k_2;
len_2=k_2.length();
} int jishu_2=;
for(int i=;i<;i++){
int a;
if(k_2[i]>=''&&k_2[i]<='')
a=k_2[i]-'';
else
a=k_2[i]-'A'+; int n[]={};
int f=;
while(a){
n[f]=a%;
a=a/;
f++;
}
miyao[jishu_2*]=n[];
miyao[jishu_2*+]=n[];
miyao[jishu_2*+]=n[];
miyao[jishu_2*+]=n[];
jishu_2++;
} //置换选择1
int IP_1[]={, , , , , , ,
, , , , , , ,
, , , , , , ,
, , , , , , ,
, , , , , , ,
, , , , , , ,
, , , , , , ,
, , , , , , }; //16次左移对应的位数
int weiyi[]={,,,,,,,,,,,,,,,};
// 置换选择2 秘钥56->48位压缩
int IP_2[]={, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , }; //S盒 int s[][]=
{
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
},
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
},
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
},
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
},
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
},
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
},
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
},
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
}
}; //P置换
int P[]={, , , , , , , ,
, , , , , , , ,
, , , , , , , ,
, , , , , , , }; //1初始置换
//1.1 64明文进行初始置换分左右
int mingwen_1[];
int l[],r[];
for (int i=;i<;i++){
mingwen_1[i]=mingwen[IP[i]-];
}
for(int i=;i<;i++){
l[i]=mingwen_1[i];
r[i]=mingwen_1[i+];
}
cout<<"明文初始置换M =";
for(int i=;i<;i++){
if(i%==) cout<<" ";
cout<<mingwen_1[i];
}
cout<<endl; //1.2 56位秘钥初始置换分左右 cout<<"秘钥初始置换k0 =";
for(int i=;i<;i++){
if(i%==) cout<<" ";
cout<<miyao[i];
}
cout<<endl; int ml[],mr[];
int miyao_0[];
for(int i=;i<;i++){
miyao_0[i]=miyao[IP_1[i]-];
}
for(int i=;i<;i++){
ml[i]=miyao_0[i];
mr[i]=miyao_0[i+];
} //2.循环加密
for (int i=;i<;i++){ cout<<"-------------------------------第"<<i+<<"轮循环-----------------------------------" <<endl; //2.1明文左右交换
int new_l[],new_r[];
for(int j=;j<;j++){
new_l[j]=r[j];
} //2.2 右边32位拓展变换成48位
for(int j=;j<;j++){
new_r[j]=r[E[j]-];
} //2.3 左右秘钥 左移
int new_ml[],new_mr[];
for(int j=;j<;j++){
new_ml[j]=ml[(j++weiyi[i])%];
new_mr[j]=mr[(j++weiyi[i])%];
} //2.4 重新合并成56位的秘钥
int miyao_1[];
for(int j=;j<;j++){
miyao_1[j]=new_ml[j];
miyao_1[j+]=new_mr[j];
}
//2.5 IP_2 56位秘钥压缩成48位的秘钥
int k[];
for (int j=;j<;j++){
k[j]=miyao_1[IP_2[j]-];
} cout<<"k"<<i+<<" =";
for(int j=;j<;j++){
if(j%==) cout<<" ";
cout<<k[j];
}
cout<<endl; cout<<"R"<<i<<" "<<"=";
for(int j=;j<;j++){
if(j%==) cout<<" ";
cout<<new_r[j];
}
cout<<endl; //2.6 2.2和2.5XOR
int new_r2[];
for(int j=;j<;j++){
new_r2[j]=new_r[j] ^ k[j];
} cout<<"R(i-1)^ki "<<"=";
for(int j=;j<;j++){
if(j%==) cout<<" ";
cout<<new_r2[j];
}
cout<<endl; //2.7 s盒
int new_r3[];
int b1,b2,b3,b4,b5,b6;
int m=;
for(int j=;j<;j++){
int row = ((new_r2[j*])<<)+(new_r2[j*+]); //第1,6位组成行号
int col = ((new_r2[j*+])<<)+((new_r2[j*+])<<)+((new_r2[j*+])<<)+(new_r2[j*+]); //第2,3,4,5位组成列号
//找到s盒对应的数
int a=s[j][*row+col]; //转成对应的2进制
int n[]={};
int f=;
while(a){
n[f]=a%;
a=a/;
f++;
} new_r3[m*]=n[];
new_r3[m*+]=n[];
new_r3[m*+]=n[];
new_r3[m*+]=n[];
m++;
} cout<<"第"<<i+<<"轮s盒"<<" =";
for(int j=;j<;j++){
if(j%==) cout<<" ";
cout<<new_r3[j];
}
cout<<endl; //2.8 P置换
int new_r4[];
for(int j=;j<;j++){
new_r4[j]=new_r3[P[j]-];
} cout<<"P置换 "<<"=";
for(int j=;j<;j++){
if(j%==) cout<<" ";
cout<<new_r4[j];
}
cout<<endl; //2.9 明文左边32位和2.8 new_r4[32] XOR
int new_r5[];
for(int j=;j<;j++){
new_r5[j]=l[j] ^ new_r4[j];
//更新左右明文,以便于下次循环
l[j]=new_l[j];
r[j]=new_r5[j];
} cout<<"R"<<i+<<" =";
for(int j=;j<;j++){
if(j%==) cout<<" ";
cout<<new_r5[j];
}
cout<<endl;
cout<<"L"<<i+<<" =";
for(int j=;j<;j++){
if(j%==) cout<<" ";
cout<<new_l[j];
}
cout<<endl;
//2.10 更新左右秘钥,以便于下次循环
for(int j=;j<;j++){
ml[j]=new_ml[j];
mr[j]=new_mr[j];
} cout<<"----------------------------------------------------------------------------"<<endl<<endl<<endl; } //3. 循环加密之后的明文mingwen_1[64]
for(int i=;i<;i++){
mingwen_1[i]=r[i];
mingwen_1[i+]=l[i];
} // cout<<"逆置换前=";
// for(int i=0;i<64;i++){
// cout<<mingwen_1[i];
// }
// cout<<endl<<endl; //4. 逆置换
int miwen[];
for(int i=;i<;i++){
miwen[IP[i]-]=mingwen_1[i];
} //5.输出 cout<<"原明文为:";
for(int i=;i<;i++){
if(i%==) cout<<endl;
cout<<mingwen[i];
}
cout<<endl<<endl;
cout<<"秘钥为:";
for(int i=;i<;i++){
if(i%==) cout<<endl;
cout<<miyao[i];
}
cout<<endl<<endl;
cout<<"密文为:";
for(int i=;i<;i++){
if(i%==) cout<<endl;
cout<<miwen[i];
}
//是否将密文转换成十六进制?(Y or N) cout<<endl<<endl<<"是否将密文转换成十六进制?(Y or N):";
char YN;
cin>>YN;
cout<<endl<<"十六进制密文表示:";
if(YN=='Y'){
for(int i=;i<;i++){
int q=miwen[i*]*+miwen[i*+]*+miwen[i*+]*+miwen[i*+];
if(q>= && q<= ){
cout<<q;
}
else{
cout<<hex<<uppercase<<q;
}
}
}
cout<<endl<<endl<<"!!!!皆大欢喜,普天同庆!!!!"<<endl;
return ;
} int jiemi(){
// 密文
int miwen[]; cout<<"请输入16位十六进制的密文:";
string kk;
cin>>kk;
int len=kk.length(); while(len!=){
cout<<"请重新输入16位十六进制的密文:";
cin>>kk;
len=kk.length();
} int jishu=;
for(int i=;i<;i++){
int a;
if(kk[i]>=''&&kk[i]<='')
a=kk[i]-'';
else
a=kk[i]-'A'+; int n[]={};
int f=;
while(a){
n[f]=a%;
a=a/;
f++;
}
miwen[jishu*]=n[];
miwen[jishu*+]=n[];
miwen[jishu*+]=n[];
miwen[jishu*+]=n[];
jishu++;
} //初始置换IP
int IP[]={, , , , , , , ,
, , , , , , , ,
, , , , , , , ,
, , , , , , , ,
, , , , , , , ,
, , , , , , , ,
, , , , , , , ,
, , , , , , , }; // 选择运算E 32位明文扩充为48位
int E[]={ , , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , }; //64位秘钥 0123456789ABCDEF 56位的秘钥+8位校验码
int miyao[];
cout<<"请输入16位十六进制的秘钥:";
string k_2;
cin>>k_2;
int len_2=k_2.length(); while(len_2!=){
cout<<"请重新输入16位十六进制的秘钥:";
cin>>k_2;
len_2=k_2.length();
} int jishu_2=;
for(int i=;i<;i++){
int a;
if(k_2[i]>=''&&k_2[i]<='')
a=k_2[i]-'';
else
a=k_2[i]-'A'+; int n[]={};
int f=;
while(a){
n[f]=a%;
a=a/;
f++;
}
miyao[jishu_2*]=n[];
miyao[jishu_2*+]=n[];
miyao[jishu_2*+]=n[];
miyao[jishu_2*+]=n[];
jishu_2++;
} //置换选择1
int IP_1[]={, , , , , , ,
, , , , , , ,
, , , , , , ,
, , , , , , ,
, , , , , , ,
, , , , , , ,
, , , , , , ,
, , , , , , }; //16次左移对应的位数
int weiyi[]={,,,,,,,,,,,,,,,};
// 置换选择2 秘钥56->48位压缩
int IP_2[]={, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , ,
, , , , , }; //S盒
int s[][]=
{
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
},
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
},
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
},
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
},
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
},
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
},
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
},
{
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,
}
}; //P置换
int P[]={, , , , , , , ,
, , , , , , , ,
, , , , , , , ,
, , , , , , , }; //1初始置换 //1.1 64密文进行逆置换分左右
int miwen_1[];
int l[],r[];
for (int i=;i<;i++){
miwen_1[i]=miwen[IP[i]-];
}
for(int i=;i<;i++){
r[i]=miwen_1[i];
l[i]=miwen_1[i+];
}
cout<<"密文逆置换 =";
for(int i=;i<;i++){
if(i%==) cout<<" ";
cout<<miwen_1[i];
}
cout<<endl; //1.2 56位秘钥初始置换分左右 cout<<"秘钥初始置换k0 =";
for(int i=;i<;i++){
if(i%==) cout<<" ";
cout<<miyao[i];
}
cout<<endl; int ml_0[],mr_0[];
int miyao_0[];
for(int i=;i<;i++){
miyao_0[i]=miyao[IP_1[i]-];
}
for(int i=;i<;i++){
ml_0[i]=miyao_0[i];
mr_0[i]=miyao_0[i+];
} // 因为加密过程一共左移了28位,回到了原来的位置,
//所以我们要先将原始秘钥左移一次。 int ml[],mr[];
for(int j=;j<;j++){
ml[j]=ml_0[(j++)%];
mr[j]=mr_0[(j++)%];
} //2.循环解密
for (int i=;i<;i++){ cout<<"-------------------------------第"<<i+<<"轮循环解密-----------------------------------" <<endl; //2.1密文左右交换
int new_l[],new_r[];
for(int j=;j<;j++){
new_r[j]=l[j];
} //2.2 左边32位拓展变换成48位
for(int j=;j<;j++){
new_l[j]=new_r[E[j]-];
} //2.3 左右秘钥 右移 int new_ml[],new_mr[];
for(int j=;j<;j++){
new_ml[j]=ml[(j+-weiyi[-i])%];
new_mr[j]=mr[(j+-weiyi[-i])%];
} //2.4 重新合并成56位的秘钥
int miyao_1[];
for(int j=;j<;j++){
miyao_1[j]=new_ml[j];
miyao_1[j+]=new_mr[j];
}
//2.5 IP_2 56位秘钥压缩成48位的秘钥
int k[];
for (int j=;j<;j++){
k[j]=miyao_1[IP_2[j]-];
} cout<<"k"<<-i<<" =";
for(int j=;j<;j++){
if(j%==) cout<<" ";
cout<<k[j];
}
cout<<endl; cout<<"L"<<-i<<" "<<"=";
for(int j=;j<;j++){
if(j%==) cout<<" ";
cout<<new_l[j];
}
cout<<endl; //2.6 2.2和2.5XOR
int new_l2[];
for(int j=;j<;j++){
new_l2[j]=new_l[j] ^ k[j];
} cout<<"Li^ki "<<"=";
for(int j=;j<;j++){
if(j%==) cout<<" ";
cout<<new_l2[j];
}
cout<<endl; //2.7 s盒
int new_l3[];
int b1,b2,b3,b4,b5,b6;
int m=;
for(int j=;j<;j++){
int row = ((new_l2[j*])<<)+(new_l2[j*+]); //第1,6位组成行号
int col = ((new_l2[j*+])<<)+((new_l2[j*+])<<)+((new_l2[j*+])<<)+(new_l2[j*+]); //第2,3,4,5位组成列号
//找到s盒对应的数
int a=s[j][*row+col]; //转成对应的2进制
int n[]={};
int f=;
while(a){
n[f]=a%;
a=a/;
f++;
} new_l3[m*]=n[];
new_l3[m*+]=n[];
new_l3[m*+]=n[];
new_l3[m*+]=n[];
m++;
} cout<<"第"<<-i<<"轮s盒"<<" =";
for(int j=;j<;j++){
if(j%==) cout<<" ";
cout<<new_l3[j];
}
cout<<endl; //2.8 P置换
int new_l4[];
for(int j=;j<;j++){
new_l4[j]=new_l3[P[j]-];
} cout<<"P置换 "<<"=";
for(int j=;j<;j++){
if(j%==) cout<<" ";
cout<<new_l4[j];
}
cout<<endl; //2.9 密文右边32位和2.8 new_l4[32] XOR
int new_l5[];
for(int j=;j<;j++){
new_l5[j]=r[j] ^ new_l4[j];
//更新左右明文,以便于下次循环
r[j]=new_r[j];
l[j]=new_l5[j];
} cout<<"L"<<-i-<<" =";
for(int j=;j<;j++){
if(j%==) cout<<" ";
cout<<new_l5[j];
}
cout<<endl;
cout<<"R"<<-i-<<" =";
for(int j=;j<;j++){
if(j%==) cout<<" ";
cout<<new_r[j];
}
cout<<endl; //2.10 更新左右秘钥,以便于下次循环
for(int j=;j<;j++){
ml[j]=new_ml[j];
mr[j]=new_mr[j];
} cout<<"ml"<<-i<<"=";
for(int j=;j<;j++){
cout<<ml[j];
}
cout<<endl;
cout<<"mr"<<-i<<"=";
for(int j=;j<;j++){
cout<<mr[j];
}
cout<<endl; cout<<"------------------------------------------------------------------------------"<<endl<<endl<<endl; } //3. 循环解密之后的密文miwen_1[64]
for(int i=;i<;i++){
miwen_1[i]=l[i];
miwen_1[i+]=r[i];
}
//4. 初始置换
int mingwen[];
for(int i=;i<;i++){
mingwen[IP[i]-]=miwen_1[i];
} //5.输出 cout<<"原密文为:";
for(int i=;i<;i++){
if(i%==) cout<<endl;
cout<<miwen[i];
}
cout<<endl<<endl;
cout<<"秘钥为:";
for(int i=;i<;i++){
if(i%==) cout<<endl;
cout<<miyao[i];
}
cout<<endl<<endl;
cout<<"明文为:";
for(int i=;i<;i++){
if(i%==) cout<<endl;
cout<<mingwen[i];
}
//是否将明文转换成十六进制?(Y or N) cout<<endl<<endl<<"是否将明文转换成十六进制?(Y or N):";
char YN;
cin>>YN;
cout<<endl<<"十六进制明表示:";
if(YN=='Y'){
for(int i=;i<;i++){
int q=mingwen[i*]*+mingwen[i*+]*+mingwen[i*+]*+mingwen[i*+];
if(q>= && q<= ){
cout<<q;
}
else{
cout<<hex<<uppercase<<q;
}
}
}
cout<<endl<<endl<<"!!!!皆大欢喜,普天同庆!!!!"<<endl;
return ;
} int main(){ while(){
int number;
cout<<"===欢迎来到DES加密算法系统==="<<endl;
cout<<" Author:十七"<<endl;
cout<<"目前支持的操作有:"<<endl;
cout<<" 1.加密操作;"<<endl;
cout<<" 2.解密操作;"<<endl;
cout<<" 0.退出。"<<endl;
cout<<"============================="<<endl;
cout<<"请选择您项进行的操作:";
cin>>number;
cout<<endl; if(number==){
jiami();
}
else if(number==){
jiemi();
}
else{
cout<<"您已成功退出系统,如果您对本次服务感到满意,欢迎五星好评^_^"<<endl;
return ;
}
}
return ;
}
运行结果截图:

......


......

DES加密解密算法C++实现的更多相关文章
- java 实现 DES加密 解密算法
DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种: ...
- DES加密解密算法C语言代码实现
代码: #include<stdio.h> #include<string.h> #include<stdlib.h> /*-------------------- ...
- Des加密解密算法java实现
package tech.fullink.eaglehorn.utils; import javax.crypto.Cipher; import javax.crypto.SecretKey; imp ...
- C#和PHP加密结果一致的DES加密解密算法。php实现和c#一致的DES加密解密
DES加密算法 des对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码),是一种对称加密 ...
- android -------- DES加密解密算法
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信 ...
- C#MD5加密和DES加密解密算法
public partial class stringTest : System.Web.UI.Page { protected void Page_Load(object s ...
- DES对 json 、http参数加密解密算法
网上众多大神们的众多方式实现加解密操作及保障数据安全性.今天无意中发现一篇以 DES加密解密算法.摘抄如下 工具类: import java.security.SecureRandom; import ...
- 【转】asp.net(c#)加密解密算法之sha1、md5、des、aes实现源码详解
原文地址:http://docode.top/Article/Detail/10003 目录: 1..Net(C#)平台下Des加密解密源代码 2..Net(C#)平台下Aes加密解密源代码 3..N ...
- des加密解密——java加密,php解密
最近在做项目中,遇到des加密解密的问题. 场景是安卓app端用des加密,php这边需要解密.之前没有接触过des这种加密解密算法,但想着肯定会有demo.因此百度,搜了代码来用.网上代码也是鱼龙混 ...
随机推荐
- 倒计时器CountDownLatch
1.背景: countDownLatch是在java1.5被引入,跟它一起被引入的工具类还有CyclicBarrier.Semaphore.concurrentHashMap和BlockingQueu ...
- coding++:高并发解决方案限流技术--计数器--demo
1.它是限流算法中最简单最容易的一种算法 计数器实现限流 每分钟只允许10个请求 第一个请求进去的时间为startTime,在startTime + 60s内只允许10个请求 当60s内超过十个请求后 ...
- windows server 2016 远程桌面mstsc DPI(更改文本、应用和其他项目大小) 设置
windows server 2016 远程桌面mstsc DPI 设置 在高分辨率机器2K,4K,8K,登入使用window远程桌面mstsc时,登入后虽然分辨率变成了和cilent一样分辨率 但是 ...
- Linux下使用FastDFS
本文所有操作均在CentOS 7.x环境下进行. 1.1.单节点FastDFS 整个安装过程非常复杂,很容易出错,建议进行多次备份. 我们这里不打算安装多台虚拟机,因此会把tracker和storag ...
- Java的多线程1:线程的使用
概述 进程是线程的容器,线程共享进程的内存空间,所以线程之间彼此通信是比较容易的,而线程又有自己私有的内存地址,其他线程无法访问.了解进程和线程关系,可以看我另一篇博客<进程与线程> Ja ...
- springboot 切面添加日志功能
1.新建一个springboot项目 2.定义个切面类,并指定切入点,获取所需记录信息(如:访问人IP, 访问地址,访问地址名称等) 3.新建数据库 SET FOREIGN_KEY_CHECKS=0; ...
- 各种版本docker下载的中国开源地址
最近在群里听说Docker很火,于是自己抱着试试的态度,想玩玩,可是遇到了一些问题,记录下来,方便备忘,也方便防止大家被坑. 我的虚拟机装的是centos 6.5,百度了好多教程,丫的,都不解释,就一 ...
- scratch中如何实现面向鼠标指针的相反方向?
你可以试试设置面向鼠标指针,然后再角色进行翻转,而且要是面向反方向的话,鼠标指针是自己可以调节的,面向指针也可以的 scratch学习视频 链接:https://pan.baidu.com/s/1qX ...
- Docker基础修炼2--Docker镜像原理及常用命令
通过前文的讲解对Docker有了基本认识之后,我们开始进入实战操作,本文先演示Docker三要素之镜像原理和相关命令. 本文的演示环境仍然沿用上一篇文章在本地Centos7中安装的环境,如果你本地没有 ...
- Java 数据持久化系列之 HikariCP (一)
在上一篇<Java 数据持久化系列之池化技术>中,我们了解了池化技术,并使用 Apache-common-Pool2 实现了一个简单连接池,实验对比了它和 HikariCP.Druid 等 ...