‘壹’ 6位数密码有多少组合
0到9的6位数密码一共有1000000组(一百万组),就是1000000种可能。
做题思路:
0~9有十个数,每个位置可以使用0~9,因此很容易知道六位数密码的每个位有十种可能性,这是排列问题,用乘法就可以解决。所以每个位置的可能性相乘,6个10相乘得到结果 10*10*10*10*10*10=1000000 。
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
排列组合中的基本计数原理
1、加法原理和分类计数法
(1)加法原理:做一件事,完成它可以有n类办法,在第一类办法中有m1种不同的方法,在第二类办法中有m2种不同的方法,……,在第n类办法中有mn种不同的方法,那么完成这件事共有N=m1+m2+m3+…+mn种不同方法。
(2)第一类办法的方法属于集合A1,第二类办法的方法属于集合A2,……,第n类办法的方法属于集合An,那么完成这件事的方法属于集合A1UA2U…UAn。
‘贰’ 密码由 6-16 位数字、字母或符号组成,至少包含 2 种字符。 保存
所谓密码字符就是指密码,而密码是有要求的,长度必须要超过6位,最大不超过16位。可以由 字母、符号、数字组成并且区分大小写。
数字、字母代表两种字符,一个数字即一个字符,一个字母也是一个字符。不限定字母、数字的个数和顺序,只要符合密码长度(8-16)就可以。现在很多密码都要求使用多种字符的混合方式,这样不容易被猜测或者破解,以保护用户密码安全。
加密方法
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。
RSA的算法涉及三个参数:n,e1,e2。其中,n是两个大质数p和q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质(互质:两个正整数只有公约数1时,他们的关系叫互质);再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。
以上内容参考:网络-密码
‘叁’ 非对称加密算法
如果要给世界上所有算法按重要程度排个序,那我觉得“公钥加密算法”一定是排在最前边的,因为它是现代计算机通信安全的基石,保证了加密数据的安全。
01 对称加密算法
在非对称加密出现以前,普遍使用的是对称加密算法。所谓对称加密,就是加密和解密是相反的操作,对数据进行解密,只要按加密的方式反向操作一遍就可以获得对应的原始数据了,举一个简单的例子,如果要对字符串"abc"进行加密,先获取它们的ANSCII码为:97 98 99;密钥为+2,加密后的数据就是:99 100 101,将密文数据发送出去。接收方收到数据后对数据进行解密,每个数据减2,就得到了原文。当然这只是一个非常简单的例子,真实的对称加密算法会做得非常复杂,但这已经能够说明问题了。
这样的加密方法有什么缺点呢?首先缺点一:密钥传递困难;想想看如果两个人,分别是Bob和Alice,Bob要给Alice发消息,那Bob就要把密钥通过某种方式告诉Alice,有什么可靠的途径呢?打电话、发邮件、写信...等等方式好像都不靠谱,都有被窃取的风险,也只有两人见面后当面交流这一种方式了;缺点二:密钥数量会随着通信人数的增加而急剧增加,密钥管理将会是一个非常困难的事情。
02 非对称加密算法
1976年,两位美国计算机学家,提出了Diffie-Hellman密钥交换算法。这个算法的提出了一种崭新的构思,可以在不直接传递密钥的情况下,完成解密。这个算法启发了其他科学家,让人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应的关系即可,这样就避免了直接传递密钥。这种新的加密模式就是“非对称加密算法”。
算法大致过程是这样的:
(1)乙方 生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
(2)甲方获取乙方的公钥,然后用它对信息加密。
(3)乙方得到加密后的信息,用私钥解密。
如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。
03 RSA非对称加密算法
1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。
从那时直到现在,RSA算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。
公钥加密 -> 私钥解密
只有私钥持有方可以正确解密,保证通信安全
私钥加密 -> 公钥解密
所有人都可以正确解密,信息一定是公钥所对应的私钥持有者发出的,可以做签名
04 质数的前置知识
RSA的安全性是由大数的质因数分解保证的。下面是一些质数的性质:
1、任意两个质数构成素质关系,比如:11和17;
2、一个数是质数,另一个数只要不是前者的倍数,两者就构成素质关系,比如3和10;
3、如果两个数之中,较大的那个是质数,则两者构成互质关系,比如97和57;
4、1和任意一个自然数都是互质关系,比如1和99;
5、p是大于1的整数,则p和p-1构成互质关系,比如57和56;
6、p是大于1的奇数,则p和p-2构成互质关系,比如17和15
05 RSA密钥生成步骤
举个“栗子“,假如通信双方为Alice和Bob,Alice要怎么生成公钥和私钥呢?
St ep 1:随机选择两个不相等的质数p和q;
Alice选择了3和11。(实际情况中,选择的越大,就越难破解)
S tep 2 :计算p和q的乘积n;
n = 3*11 = 33,将33转化为二进制:100001,这个时候密钥长度就是6位。
Step 3 :计算n的欧拉函数φ(n);
因为n可以写为两个质数相乘的形式,欧拉函数对于可以写成两个质数形式有简单计算方式
φ(n) = (p-1)(q-1)
Step 4 :随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质;
爱丽丝就在1到20之间,随机选择了3
Step 5 :计算e对于φ(n)的模反元素d
所谓模反元素,就是指有一个整数d,可以使得ed被φ(n)除的余数为1
Step 6 :将n和e封装成公钥,n和d封装成私钥;
在上面的例子中,n=33,e=3,d=7,所以公钥就是 (33,3),私钥就是(33, 7)。
密钥生成步骤中,一共出现了六个数字,分别为:
素质的两个数p和q,乘积n,欧拉函数φ(n),随机质数e,模反元素d
这六个数字之中,公钥用到了两个(n和e),其余四个数字都是不公开的,可以删除。其中最关键的是d,因为n和d组成了私钥,一旦d泄漏,就等于私钥泄漏。
那么,有无可能在已知n和e的情况下,推导出d?
(1)ed 1 (mod φ(n))。只有知道e和φ(n),才能算出d。
(2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
(3)n=pq。只有将n因数分解,才能算出p和q。
结论是如果n可以被因数分解,d就可以算出,也就意味着私钥被破解。
BUT!
大整数的因数分解,是一件非常困难的事情。目前,除了暴力破解,还没有发现别的有效方法。
维基网络这样写道:
"对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。
假如有人找到一种快速因数分解的算法,那么RSA的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有较短的RSA密钥才可能被暴力破解。到现在为止,世界上还没有任何可靠的攻击RSA算法的方式。
只要密钥长度足够长,用RSA加密的信息实际上是不能被解破的。"
06 RSA加密和解密过程
1、加密要用公钥(n,e)
假设鲍勃要向爱丽丝发送加密信息m,他就要用爱丽丝的公钥 (n,e) 对m进行加密。
所谓"加密",就是算出下式的c:
爱丽丝的公钥是 (33, 3),鲍勃的m假设是5,那么可以算出下面的等式:
于是,c等于26,鲍勃就把26发给了爱丽丝。
2、解密要用私钥(n,d)
爱丽丝拿到鲍勃发来的26以后,就用自己的私钥(33, 7) 进行解密。下面的等式一定成立(至于为什么一定成立,证明过程比较复杂,略):
也就是说,c的d次方除以n的余数为m。现在,c等于26,私钥是(33, 7),那么,爱丽丝算出:
因此,爱丽丝知道了鲍勃加密前的原文就是5。
至此,加密和解密的整个过程全部完成。整个过程可以看到,加密和解密使用不用的密钥,且不用担心密钥传递过程中的泄密问题,这一点上与对称加密有很大的不同。由于非对称加密要进行的计算步骤复杂,所以通常情况下,是两种算法混合使用的。
07 一些其它的
在Part 5的第五步,要求一定要解出二元一次方程的一对正整数解,如果不存在正整数解,这该怎么办?
扩展欧几里得算法给出了解答:
对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by;
第五步其实等价于:ed - kφ(n) = 1, e与φ(n)又互质,形式上完全与扩展欧几里得算法的一致,所以一定有整数解存在。
Reference:
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
‘肆’ 请问java里将某个文本进行加密成了6位的数字+字母,请问是什么加密方式,加密成的值字母区分大小写。
这个加密不知道行不行?
public class Escape {
private final static String[] hex = { "00", "01", "02", "03", "04", "05",
"06", "07", "08", "09", "0A", "0B", "0C", "0D", "0E", "0F", "10",
"11", "12", "13", "14", "15", "16", "17", "18", "19", "1A", "1B",
"1C", "1D", "1E", "1F", "20", "21", "22", "23", "24", "25", "26",
"27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F", "30", "31",
"32", "33", "34", "35", "36", "37", "38", "39", "3A", "3B", "3C",
"3D", "3E", "3F", "40", "41", "42", "43", "44", "45", "46", "47",
"48", "49", "4A", "4B", "4C", "4D", "4E", "4F", "50", "51", "52",
"53", "54", "55", "56", "57", "58", "59", "5A", "5B", "5C", "5D",
"5E", "5F", "60", "61", "62", "63", "64", "65", "66", "67", "68",
"69", "6A", "6B", "6C", "6D", "6E", "6F", "70", "71", "72", "73",
"74", "75", "76", "77", "78", "79", "7A", "7B", "7C", "7D", "7E",
"7F", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89",
"8A", "8B", "8C", "8D", "8E", "8F", "90", "91", "92", "93", "94",
"95", "96", "97", "98", "99", "9A", "9B", "9C", "9D", "9E", "9F",
"A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "AA",
"AB", "AC", "AD", "AE", "AF", "B0", "B1", "B2", "B3", "B4", "B5",
"B6", "B7", "B8", "B9", "BA", "BB", "BC", "BD", "BE", "BF", "C0",
"C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "CA", "CB",
"CC", "CD", "CE", "CF", "D0", "D1", "D2", "D3", "D4", "D5", "D6",
"D7", "D8", "D9", "DA", "DB", "DC", "DD", "DE", "DF", "E0", "E1",
"E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "EA", "EB", "EC",
"ED", "EE", "EF", "F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7",
"F8", "F9", "FA", "FB", "FC", "FD", "FE", "FF" };
private final static byte[] val = { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x01,
0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F };
/**
* Unicode 格式 编码
*
* @param s
* @return
*/
public static String escape(String s) {
StringBuffer sbuf = new StringBuffer();
int len = s.length();
for (int i = 0; i < len; i++) {
int ch = s.charAt(i);
if ('A' <= ch && ch <= 'Z') {
sbuf.append((char) ch);
} else if ('a' <= ch && ch <= 'z') {
sbuf.append((char) ch);
} else if ('0' <= ch && ch <= '9') {
sbuf.append((char) ch);
} else if (ch == '-' || ch == '_'
|| ch == '.' || ch == '!' || ch == '~' || ch == '*'
|| ch == '\'' || ch == '(' || ch == ')') {
sbuf.append((char) ch);
} else if (ch <= 0x007F) {
sbuf.append('%');
sbuf.append(hex[ch]);
} else {
sbuf.append('%');
sbuf.append('u');
sbuf.append(hex[(ch >>> 8)]);
sbuf.append(hex[(0x00FF & ch)]);
}
}
return sbuf.toString();
}
/**
* 解码 说明:本方法保证 不论参数s是否经过escape()编码,均能得到正确的“解码”结果
*
* @param s
* @return
*/
public static String unescape(String s) {
StringBuffer sbuf = new StringBuffer();
int i = 0;
int len = s.length();
while (i < len) {
int ch = s.charAt(i);
if ('A' <= ch && ch <= 'Z') {
sbuf.append((char) ch);
} else if ('a' <= ch && ch <= 'z') {
sbuf.append((char) ch);
} else if ('0' <= ch && ch<= '9') {
sbuf.append((char) ch);
} else if (ch == '-' || ch == '_'|| ch == '.' || ch == '!' || ch == '~' || ch == '*'|| ch == '\'' || ch == '(' || ch == ')') {
sbuf.append((char) ch);
} else if (ch == '%') {
int cint = 0;
if ('u' != s.charAt(i + 1)) {
cint = (cint << 4) | val[s.charAt(i + 1)];
cint = (cint << 4) | val[s.charAt(i + 2)];
i += 2;
} else {
cint = (cint << 4) | val[s.charAt(i + 2)];
cint = (cint << 4) | val[s.charAt(i + 3)];
cint = (cint << 4) | val[s.charAt(i + 4)];
cint = (cint << 4) | val[s.charAt(i + 5)];
i += 5;
}
sbuf.append((char) cint);
} else {
sbuf.append((char) ch);
}
i++;
}
return sbuf.toString();
}
/**
* 把unicode编码转换成正常字符
*
* @param hex
* @return
*/
public static String binaryToUnicode(String hex) {
String strContent = "";
try {
int i;
int n;
int j;
n = hex.length() / 4;
j = 0;
char[] content = new char[n];
for (i = 0; i < n; i++) {
j = i * 4;
content[i] = (char) Integer.parseInt(hex.substring(j, j + 4),
16);
}
strContent = new String(content);
} catch (Exception ex) {
ex.printStackTrace();
strContent = "";
}
return strContent;
}
/**
* 把字符转换成unicode编码
*
* @param content
* @return
*/
public static String unicodeToBinary(String content) {
String hexStr = "";
try {
char[] contentBuffer = content.toCharArray();
String s;
int n;
for (int i = 0; i < content.length(); i++) {
n = (int) contentBuffer[i];
s = Integer.toHexString(n);
if (s.length() > 4) {
s = s.substring(0, 4);
} else {
s = "0000".substring(0, 4 - s.length()) + s;
}
hexStr = hexStr + s;
}
} catch (Exception ex) {
hexStr = "";
}
return hexStr.toUpperCase();
}
public static void main(String[] args) {
// String stest = "\"asd请选择";
// System.out.println(escape(stest));
// System.out.println(unescape(escape(stest))+"||"+unescape(stest));
// System.out.println("0----9:"+(int)'0'+"--------"+(int)'9');
// System.out.println("A----Z:"+(int)'A'+"--------"+(int)'Z');
// System.out.println("a----z:"+(int)'a'+"--------"+(int)'z');
// System.out.println("-:"+(int)'-'+"||" +(int)'_'+"||"+(int)'.'
// +"||" +(int)'!'+"||"
// +(int)'~'+"||"+(int)'*'+"||"+(int)'\''+"||"
// +(int)'('+"||"+(int)')'+"||");
// for (int i = 0; i < 128; i++) {
// if (i%10==0) {
// System.out.print(" "+i+"="+(char)i+"\n");
// }else{
// System.out.print(" "+i+"="+(char)i);
// }
// // char ch = (char)i;
// // if (ch == '-' || ch == '_'|| ch == '.' || ch == '!' || ch == '~' || ch == '*'|| ch == '\'' || ch == '(' || ch == ')') {
// // System.out.println(ch+"="+(int)ch+" ");
// // }
// }unescape(String s)
System.out.println(Escape.unescape("撒33范德萨"));
System.out.println(Escape.unicodeToBinary("战略绩效计划调整"));
System.out.println(Escape.binaryToUnicode(""));
System.out.println(Escape.unescape("%u6492%u8303%u5FB7%u8428%u9426"));
}
}
‘伍’ 从理论上来讲,一个6位的纯数字密码怎么排列最安全
个人感觉就6位来说,怎么排列都不安全。用暴力破解很快就破解完成了。但是,暴力破解的人也不傻,他们会先从字典里找,先实验简单的比如“6666666”,“123456”之类常见的默认密码。当然你的生日 手机号 银行卡号 都是首先使用的对象 。所以,为了防止暴力破解简单的密码,当密码错误几次之后就会自动锁定。从而大大延长了破解密码的时间和难度。为了防止密码被盗,你非得用自己的手机号吗?用自己以前的丢掉手机号不行吗?非得全用手机号吗?换换几个数字不行么。人们对自己的手机号记得一般比较清楚,我感觉还是手机号作为原始的密钥最佳,自己实在没有可以用ex的啊(不能让现任知道哦),再加上自己定义的算法,比如逆向输入 间隔抽取 甚至你可以某个特定的位用年份的尾数(以期更换密码)。这样一般人就猜不到了吧。我擦 我密码泄露了吗?木有,你要有一种自己特殊的加密方式,永远不要告诉别人
希望采纳
‘陆’ 请问C#有什么算法可以将数字加密,而且得到的结果还是数字
纯数字那就可以随便了吧,比如说先做DES加密,加密后的结果应该是包括大小写字母,数字,两个符号/和=,你可以把每位字符的ascii转为3位十进制,比如DES加密后为AbcD,那结果就应该是065 098 099 068
‘柒’ 银行卡的密码为什么是六位数被破译的几率太大ma
银行卡我们都会用,但是有没有人想过,为什么密码只用六位,而且全用数字呢?如果被别人破译了怎么办?要明白其中的道理,首先我们来看一个法则,即“7±2法则”,它是由美国认知心理学家乔治·A·米,于1956年发表在《心理学评论》上的一篇重要论文。该论文指出,年轻人的记忆广度大约为7个单位(阿拉伯数字、字母、单词或其他单位,称为组块),也就是说,如果达到7个及以上大部分人就很难对其短时记忆(如果是年龄稍大的就很难说了),因此从记忆力上来说6位是最符合短时记忆的。
最后说明一下,不管安全措施如何完善,懂得安全知识才是最安全的,为此,给出以下建议。为了确保您的资金安全,建议您在日常生活和使用各类网络服务过程中,都要注意以下情况,谨防被别有用心的诈骗分子利用:
1)、预留的手机号码是核实您身份的重要工具。切勿将在银行办理业务时预留的手机号码设成他人的手机号码;
2)、切勿轻易将自己的Key盾、Key令交给他人使用,也不要将Key令的动态口令、银行发送的短信动态验证码透露给他人;
3)、切勿轻易向他人透露自己的身份信息和银行信息:包括银行账号、证件号码、网银/手机银行登录名、绑定银行卡或网银的手机号码、银行卡背后的三位数字、信用卡有效期等;
4)、切勿轻易向他人透露自己的各类密码,包括银行卡密码、存折密码、网银密码、手机银行密码等;
5)、如果有人通过电话、通讯软件服务(例如QQ、微信、旺旺、微博私信、论坛短信等)向您索要上述信息或安全认证工具,或将他人手机号码设置为您在银行办理业务时绑定的手机号码,请务必慎防诈骗,需妥善保管好个人资料,严防泄露;
6)、如遇到有人通过电话、通讯软件服务向您推荐所谓“内部关系办理信用卡”、“内部关系办理贷款”或各种优惠条件特别诱惑的业务等不正常的银行服务,请不要办理。如需办理信用卡、贷款等银行业务,请移步到银行网点或联系客服热线咨询办理;
7)、如有人通过电话或其他方式要求您将钱转到或存入陌生来电指定的账户,需提高警惕,可能是诈骗圈套。
‘捌’ 招商银行UKEY加密算法是多少位的
您好,若您是指申请了我行UKEY,移动证书登录密码是您激活证书时设置的6-8位数字或字母(字母需区分大小写)的密码,请回忆下(总共有10次尝试密码的机会,连续输入错误达到10次证书会自动作废)。若遗忘密码麻烦您本人带上UKEY、开户证件以及一卡通到全国任一招行网点重新申请证书。然后设置新的密码,没有推出网上或者电话取回的方式。【温馨提示:UKEY没损坏不收费。】
‘玖’ 有一个数据字符串是6位数字,比如061420,和一个秘钥也是6位数字,比如031720,求一C语言算法求生成密码
我提供一个思路你可以试试看。
将明文数字串转换成一个整数,设为a,将密钥数字串也转换成一个整数,设为k。则a为不大于20bit的二进制数。然后利用密钥k作为随机种子生成一个伪随机序列。将a中的0/1序列进行伪随机打乱,生成密文数,设为b,然后将b以数字串形式输出。即加密。解密时,则利用同一个密钥作为随机种子生成相同的伪随机序列进行解密。