需求
本机原先有一个 ssh key 用于 github 管理,现需要另外一个 key 来管理 openshift 上的应用。
由于某些原因将 .ssh/ 下文件全删了,然后 openshift 的 sshkey 生成成功。
现在需要重新为 github 生成一对密钥,即本机需要管理两对密钥。
##前言
在找免费/低价的vps之类的产品,找了半天发现Openshift里有提供试用的。
挂上代理,尝试了一下,使用过程记录如下。
##Openshift介绍
OpenShift是红帽公司推出的一个云计算服务平台,开发人员可以用它来构建和发布web应用。Openshift广泛支持多种编程语言和框架,如Java,Ruby和PHP等。另外它还提供了多种集成开发工具如Eclipse integration,JBoss Developer Studio和 Jenkins等。OpenShift 基于一个开源生态系统为移动应用,数据库服务等,提供支持。
Openshift online 是一个面向开源开发人员开放的平台即服务(Pass).
Openshift 提供一年的免费服务,这也是本文的前提之一,创建应用后,我们可以通过多种途径(其实只有三种)方便地管理应用。
##概述
隐写术是关于信息隐藏,即不让计划的接收者之外的任何人知道信息的传递事件(而不只是信息的内容)的一门技巧与科学。
通常我们隐写的对象是图片,音频,视频,文档等,为了方便,我们常常使用一些工具。
本文记录这些工具的安装过程以及简单用途。 本文实验环境为 linux(openSUSE 13.1), 而 windows 以及 os x 环境下类似。
##什么是NinePatch图片
在传统 UI 开发中,如果背景的大小不一样,一般需要制作多张图片来适应不同大小的背景。
而在 Android 中专门有一种叫 NinePatch 的图片(以 .9.png 为后缀)来解决背景大小不一样时,只用一张背景图片。
同时 NinePatch 图片可以适应各种拉伸收缩的需求而不失真以及文字的布局需求,用来适应 Android 设备那五花八门的分辨率。
在ctf比赛以及各种加密解密的游戏中,经常会遇到各种加密信息需要解密。
在此,我总结了一些常见的加密方法(有的比较古老比较经典),持续更新。
##凯撒密码
##维吉尼亚密码
##栅栏密码
##CRC32
CRC码实质上是循环冗余校验码,是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。
而CRC32就是其中的一种,其算法能够根据原数据生成8位16进制的CRC码。
正是因为这个功能,它也可以被用作特定情况下的数据加密。
在JAVA的标准库中就有现成的类可以实现对字符串的CRC32的加密。
参考:
##摩斯密码
##MD5
MD5 即 Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。
MD5算法具有以下特点:
因此其作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(也就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。
MD5密文特点
MD5应用:
参考:
##最小生成树
最小生成树:任何只由G的边构成,并包含G的所有顶点的树称为G的生成树(G连通). 加权无向图G的生成树的代价是该生成树的所有边的代码(权)的和. 最小代价生成树是其所有生成树中代价最小的生成树。
最小生成树其实是最小权重生成树的简称。
以有线电视电缆的架设为例,若只能沿着街道布线,则以街道为边,而路口为顶点,其中必然有一最小生成树能使布线成本最低。
##性质
##常用算法
##思想
贪心法:一次“生成”一条“安全边“1
2
3
4
5
6GENERIC-MST-FUNCTION (G,w)
1 T := 空集合
2 while T 还不是生成树
3 do 找出对 T 来说是不会形成环,且权重最低的边 (u, v)
4 T := T U {(u, v)}
5 return T
##kruskal算法
###步骤
###模板1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74//基于并查集
class Edge{
public:
int u, v; //两个结点
double len; //边权
//bool choose; //边是否使用过
Edge(){}
Edge(int _u, int _v, double _len){
u = _u;
v = _v;
len = _len;
//choose = false;
}
};
//比较函数,升序
bool cmp(const Edge &a, const Edge &b){
if (a.len < b.len){
return true;
}else{
return false;
}
}
class kruskal{
vector<Edge> edge; //边的集合
vector<int> father; //结点的父亲结点
int n; //n points
int ans; //the least values of the spanning tree
void Solve(){
///Init///
edge.clear();
father.clear();
///read point///
(read edge[])
(initial father[])
///get edges sorted///
sort(edge.begin(), edge.end(), cmp);
///kruskal start///
int cnt = 0;//number of edges
ans = 0;
for (int i = 0; i < edge.size(); i++){
if (cnt == n-s-1) break;
//一般地,s为0.
//如果有s条边在算法开始之前确定是最小生成树的一部分,当cnt=n-s-1时,算法完成。
if (IsSameFa(edge[i].u, edge[i].v)) continue;
Union(edge[i].u, edge[i].v);
edge[i].choose = true;
ans += edge[i].len;
cnt++;
}
///output///
}
bool IsSameFa(int x, int y){
return GetFather(x) == GetFather(y);
}
void Union(int x, int y){
father[GetFather(x)] = GetFather(y);
}
int GetFather(int x){
if (father[x] == x) return x;
else return father[x] = GetFather(father[x]);
}
}
###算法分析与适用范围
Kruskal算法需要对图的边进行访问,所以时间复杂度只和边有关系,可以证明其时间复杂度为O(E*logE)。
比较适合求稀疏图的最小生成树。
##demo1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#include <iostream>
using namespace std;
void fac(int n){
int a = 2;
while(a*a <= n){
while(n%a == 0){
cout << a << endl;
n = n/a;
}
a++;
}
if (n > 1) cout << n << endl;
}
int main(){
int n;
cin >> n;
fac(n);
}