导航:首页 > 源码编译 > 推荐算法用于银行

推荐算法用于银行

发布时间:2022-08-19 00:24:44

⑴ 银行的加密算法有几种、有哪几种、主要详情是什么

6种,DES、AES、MD5、RSA、双钥加密、非对称加密。

DES算法
DES(Data Encryption Standard)是一种经典的对称算法。其数据分组长度为64位,使用的密钥为64位,有效密钥长度为56位(有8位用于奇偶校验)。它由IBM公司在70年代开发,经过政府的加密标准筛选后,于1976年11月被美国政府采用,随后被美国国家标准局和美国国家标准协会(American National Standard Institute, ANSI) 承认。
AES算法
1997年1月美国国家标准和技术研究所(NIST)宣布征集新的加密算法。2000年10月2日,由比利时设计者Joan Daemen和Vincent Rijmen设计的Rijndael算法以其优秀的性能和抗攻击能力,最终赢得了胜利,成为新一代的加密标准AES(Advanced Encryption Standard)。
MD5
md5的全称是message-digest algorithm 5(信息-摘要算法),在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是md2、md4还是md5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但md2的设计与md4和md5完全不同,那是因为md2是为8位机器做过设计优化的,而md4和md5却是面向32位的电脑。这三个算法的描述和c语言源代码在internet rfcs 1321中有详细的描述
RSA
RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。
RSA的算法涉及三个参数,n、e1、e2。
其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。
(n及e1),(n及e2)就是密钥对。

RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n;
e1和e2可以互换使用,即:
A=B^e2 mod n;B=A^e1 mod n;
双钥加密
双钥技术就是公共密钥加密PKE(Public Key Encryption)技术,它使用两把密钥,一把公共密钥(Public Key)和一把专用密钥(Private Key),前者用于加密,后者用于解密。这种方法也称为“非对称式”加密方法,它解决了传统加密方法的根本性问题,极大地简化了密钥分发的工作量。它与传统加密方法相结合,还可以进一步增强传统加密方法的可靠性。更为突出的是,利用公共密钥加密技术可以实现数字签名。
什么是非对称加密技术
1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。

java 银行算法

import java.util.*;

class ThreadTest {
static int type = 4, num = 10; //定义资源数目和线程数目
static int[] resource = new int[type]; //系统资源总数
//static int[] Resource = new int[type]; //副本
static Random rand = new Random();
static Bank[] bank = new Bank[num]; //线程组
Bank temp = new Bank();

public void init() {
//初始化组中每个线程,随机填充系统资源总数
for(int i = 0; i < type; i++)
resource[i] = rand.nextInt(10) + 80;
System.out.print("Resource:");
for(int i = 0; i < type; i++)
System.out.print(" " + resource[i]);
System.out.println("");
for(int i = 0; i < bank.length; i++)
bank[i] = new Bank("#" + i);
}
public ThreadTest4() {
init();
}

class Bank extends Thread {
//银行家算法避免死锁
public int[]
max = new int[type], //总共需求量
need = new int[type], //尚需资源量
allocation = new int[type]; //已分配量
private int[]
request = new int[type], //申请资源量
Resource = new int[type]; //资源副本
private boolean isFinish = false; //线程是否完成
int[][] table = new int[bank.length][type*4]; //二维资源分配表

private void init() {
// 随机填充总共、尚需、已分配量
synchronized(resource) {
for(int i = 0; i < type; i++) {
max[i] = rand.nextInt(5) + 10;
need[i] = rand.nextInt(10);
allocation[i] = max[i] - need[i];
resource[i] -= allocation[i]; //从系统资源中减去已分配的
}
printer();
for(int i = 0; i < type; i++) {
if(resource[i] < 0) {
//若出现已分配量超出系统资源总数的错误则退出
System.out.println("The summation of Threads' allocations is out of range!");
System.exit(1);
}
}
}
}

public Bank(String s) {
setName(s);
init();
start();
}
public Bank() {
//none
}

public void run() {
try {
sleep(rand.nextInt(2000));
}
catch(InterruptedException e) {
throw new RuntimeException(e);
}
while(true) {
//程序没有完成时一直不断申请资源
if(askFor() == false) {
try {
sleep(1000);
}
catch(InterruptedException e) {
throw new RuntimeException(e);
}
}
else
tryRequest();
if(noNeed() == true)
break;
}
//休眠一段时间模拟程序运行
try {
sleep(1000);
}
catch(InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(getName() + " finish!");
synchronized(resource) {
//运行结束释放占有资源
for(int i = 0; i < type; i++) {
resource[i] += allocation[i];
need[i] = allocation[i] = max[i] = 0;
}
}
}

private void printer() {
//打印当前资源信息
System.out.print(getName() + " Max:");
for(int i = 0; i < type; i++)
System.out.print(" " + max[i]);
System.out.print(" Allocation:");
for(int i = 0; i < type; i++)
System.out.print(" " + allocation[i]);
System.out.print(" Need:");
for(int i = 0; i < type; i++)
System.out.print(" " + need[i]);
System.out.print(" Available:");
for(int i = 0; i < type; i++)
System.out.print(" " + resource[i]);
System.out.println("");
}
private boolean askFor() {
//随机产生申请资源量并检测是否超标
boolean canAsk = false;
for(int i = 0; i < type; i++) {
request[i] = rand.nextInt(20);
//防止申请量超过所需量
if(request[i] > need[i])
request[i] = need[i];
}
for(int i = 0; i < type; i++) //防止随机申请资源全为0
if(request[i] > 0)
canAsk = true;
synchronized(resource) {
//锁住可供资源检查是否超标
for(int i = 0; i < type; i++) {
if(request[i] > resource[i])
//如果申请资源超过可供资源则等待一段时间后重新申请
return false;
}
}
return canAsk;
}
private void tryRequest() {
//创建副本尝试分配请求
synchronized(resource) {
for(int i = 0; i < type; i++)
//依然要防止请求量超出范围
if(request[i] > resource[i])
return;
for(int i = 0; i < type; i++) {
//复制资源量并减去需求量到一个副本上
Resource[i] = resource[i];
Resource[i] -= request[i];
}
System.out.print(getName() + " ask for:");
for(int i = 0; i < type; i++)
System.out.print(" " + request[i]);
System.out.println("");
if(checkSafe() == true) {
//如果检查安全则将副本值赋给资源量并修改占有量和需求量
for(int i = 0; i < type; i++) {
resource[i] = Resource[i];
allocation[i] += request[i];
need[i] -= request[i];
}
System.out.println(getName() + " request succeed!");
}
else
System.out.println(getName() + " request fail!");
}
}
private boolean checkSafe() {
//银行家算法检查安全性
synchronized(bank) {
//将线程资源信息放入二维资源分配表检查安全性,0~type可用资源/type~type*2所需资源/type*2~type*3占有资源/type*3~-1可用+占用资源
for(int i = 0; i < bank.length; i++) {
for(int j = type; j < type*2; j++) {
table[i][j] = bank[i].need[j%type];
}
for(int j = type*2; j < type*3; j++) {
table[i][j] = bank[i].allocation[j%type];
}
}
//冒泡排序按需求资源从小到大排
for(int i = 0; i < bank.length; i++) {
for(int j = i; j < bank.length-1; j++) {
sort(j, 4);
}
}
//进行此时刻的安全性检查
for(int i = 0; i < type; i++) {
table[0][i] = Resource[i];
table[0][i+type*3] = table[0][i] + table[0][i+type*2];
if(table[0][i+type*3] < table[1][i+type])
return false;
}
for(int j = 1; j < bank.length-1; j++) {
for(int k = 0; k < type; k++) {
table[j][k] = table[j-1][k+type*3];
table[j][k+type*3] = table[j][k] + table[j][k+type*2];
if(table[j][k+type*3] < table[j+1][k+type])
return false;
}
}
}
return true;
}
private void sort(int j, int k) {
//递归冒泡排序
int tempNum;
if(table[j][k] > table[j+1][k]) {
for(int i = type; i < type*2; i++) {
tempNum = table[j][i];
table[j][i] = table[j+1][i];
table[j+1][i] = tempNum;
}
/*temp = bank[j];
bank[j] = bank[j+1];
bank[j+1] = temp;*/
}
else if(table[j][k] == table[j+1][k] && k < type*2) //此资源量相同时递归下一个资源量排序并且防止超出范围
sort(j, k+1);
}
private boolean noNeed() {
//是否还需要资源
boolean finish = true;
for(int i = 0; i < type; i++) {
if(need[i] != 0) {
finish = false;
break;
}
}
return finish;
}
}

public static void main(String[] args) {
ThreadTest t = new ThreadTest();
//后台线程,设定程序运行多长时间后自动结束
new Timeout(30000, "---Stop!!!---");
}
}
希望对你能有所帮助。

⑶ 推荐算法有哪些

推荐算法大致可以分为三类:基于内容的推荐算法、协同过滤推荐算法和基于知识的推荐算法。 基于内容的推荐算法,原理是用户喜欢和自己关注过的Item在内容上类似的Item,比如你看了哈利波特I,基于内容的推荐算法发现哈利波特II-VI,与你以前观看的在内容上面(共有很多关键词)有很大关联性,就把后者推荐给你,这种方法可以避免Item的冷启动问题(冷启动:如果一个Item从没有被关注过,其他推荐算法则很少会去推荐,但是基于内容的推荐算法可以分析Item之间的关系,实现推荐),弊端在于推荐的Item可能会重复,典型的就是新闻推荐,如果你看了一则关于MH370的新闻,很可能推荐的新闻和你浏览过的,内容一致;另外一个弊端则是对于一些多媒体的推荐(比如音乐、电影、图片等)由于很难提内容特征,则很难进行推荐,一种解决方式则是人工给这些Item打标签。 协同过滤算法,原理是用户喜欢那些具有相似兴趣的用户喜欢过的商品,比如你的朋友喜欢电影哈利波特I,那么就会推荐给你,这是最简单的基于用户的协同过滤算法(user-based collaboratIve filtering),还有一种是基于Item的协同过滤算法(item-based collaborative filtering),这两种方法都是将用户的所有数据读入到内存中进行运算的,因此成为Memory-based Collaborative Filtering,另一种则是Model-based collaborative filtering,包括Aspect Model,pLSA,LDA,聚类,SVD,Matrix Factorization等,这种方法训练过程比较长,但是训练完成后,推荐过程比较快。 最后一种方法是基于知识的推荐算法,也有人将这种方法归为基于内容的推荐,这种方法比较典型的是构建领域本体,或者是建立一定的规则,进行推荐。 混合推荐算法,则会融合以上方法,以加权或者串联、并联等方式尽心融合。 当然,推荐系统还包括很多方法,其实机器学习或者数据挖掘里面的方法,很多都可以应用在推荐系统中,比如说LR、GBDT、RF(这三种方法在一些电商推荐里面经常用到),社交网络里面的图结构等,都可以说是推荐方法。

⑷ 什么是银行家算法

银行家算法是最有代表性的避免死锁算法,是Dijkstra提出的银行家算法。这是由于该算法能用于银行系统现金贷款的发放而得名。
银行家可以把一定数量的资金供多个用户周转使用,为保证资金的安全,银行家规定:
(1)当一个用户对资金的最大需求量不超过很行家现有的资金时可接纳该用户.
(2)用户可以分期贷款,但贷款的总数不能超过最大需求量;
(3)当银行家现有的资金不能满足用户的尚需总数时,对用户的贷款可推迟支付,但总能使用户在有限的时间里得到贷款;
(4)当用户得到所需的全部资金后,一定能在有限的时间里归还所有资金

银行家算法是通过动态地检测系统中资源分配情况和进程对资源的需求情况来决定如何分配资源的,在能确保系统处于安全状态时才能把资源分配给申请者,从而避免系统发生死锁。
要记住的一些变量的名称
1 Available(可利用资源总数)
某类可利用的资源数目,其初值是系统中所配置的该类全部可用资源数目。
2 Max:某个进程对某类资源的最大需求数
3 Allocation: 某类资源已分配给某进程的资源数。
4 Need:某个进程还需要的各类资源数。
Need= Max-Allocation

系统把进程请求的资源(Request)分配给它以后要修改的变量
Available:=Available-Request;
Allocation:=Allocation+Request;
Need:= Need- Request;

⑸ 哪种加密算法最安全银行用的是哪种加密算法

现在流行的有两种,一种是加密后不可逆的但是每个值加密后都是唯一的,比如MD5,用在用户密码设置。本地在发送密码前先进行md5加密,然后直接存在用户服务器中。下次登录分别都是在输入密码后进行加密再跟服务器端数据库中的同样的加密码进行匹配。但是现在很多人都在穷举法一个个的将输入和输出进行匹配,现在很多简单密码加密后的md5都可以当查字典一样查到。

还有一种是公钥和私钥的加密方法。公钥和私钥分别代表两个值, 数据进行加密依靠这两个值进行操作,操作完后,私钥留在本地,公钥和加密文发给另外一方,另外一方也有私钥所以可以解密但是中途任何人截获到了因为没有私钥都不能解密。这个一般用在VPN和网银。 网银的那个长得像u盘的东西里面存的就是私钥和解密程序是不可读的。不过这个方法一样有弊端,任何人泄露了其中的东西整个加密系统就会瓦解。

所以没有绝对安全的加密算法

编程实现银行家算法,最好可以告诉我方法,非常感谢。

#include<stdio.h>
#define N 4
#define M 5
main()
{
int maxc[M][N]={3,2,1,4,0,2,5,2,5,1,0,5,1,5,3,0,3,0,3,3};
int availc[M][N]={2,0,1,1,0,1,2,1,4,0,0,3,0,2,1,0,1,0,3,0};
int c[N]={8,5,9,7};
int avail[N]={0};
int i=0,j=0,k[M]={-1,-1,-1,-1,-1},kk=0;
int flag=0;
int flag2=0;
/*The max need table*/
printf("nt The max need table");
printf("n process ");
for(i=0;i<N;i++)
{printf("tR[%d]",i);
}
for(i=0;i<M;i++)
{printf("n p[%d]",i);
for(j=0;j<N;j++)
{printf("t%d",maxc[i][j]);
}
}
/*the rest resource*/
for(j=0;j<N;j++)
{
for(i=0;i<M;i++)
{avail[j]+=availc[i][j];}
avail[j]=c[j]-avail[j];

}
/*The alloc table*/
printf("nnt The allocation table");
printf("n process ");
for(i=0;i<N;i++)
{printf("tR[%d]",i);
}
for(i=0;i<M;i++)
{printf("n p[%d]",i);
for(j=0;j<N;j++)
{printf("t%d",availc[i][j]);
}
}
/*the avail table*/
printf("nn avail");
for(j=0;j<N;j++)
{printf("t%d",avail[j]);}

i=0,j=0;
while(i<M)
{
for(j=0;j<M;j++)
{if(k[j]==i)
{flag=1;i++;break;}
}
if(flag==1)
{flag=0;continue;}

for(j=0;j<N;j++)
{if(avail[j]<maxc[i][j]-availc[i][j])
{flag2=1;i++;j=0;break;}
}
if(flag2==1)
{flag2=0;continue;}

k[kk]=i;

for(j=0;j<N;j++)
{avail[j]+=availc[k[kk]][j];}

/*the avail table*/
printf("n after p[%d]",i);
for(j=0;j<N;j++)
{printf("t%d",avail[j]);}

if(kk==M-1)
{printf("nThis is safe!n");
for(j=0;j<M-1;j++)
{printf("Process[%d]-->",k[j]);}
printf("Process[%d]n",k[M-1]);
break;
}
kk++;
i=0;
}

if(i==M)
printf("nthis is no safe alloc!");

getchar();
}

⑺ 典型现在加密算法

1.
对称型加密算法
也称私用密钥算法.对称型加密算法是从传统的简单换位代替密码发展而来的,自1977年美国颁布DES密码算法作为美国数据加密标准以来,对称密钥密码体制迅猛发展,得到了世界各国关注和普遍使用.对称密钥密码体制从加密模式上可分为序列密码和分组密码两大类.序列密码一直是军事和外交场合使用的主要密码技术之一,它的主要原理是通过有限状态机产生性能优良的伪随机序列,使用该序列加密信息流,得到密文序列.分组密码的工作方式是将明文分成固定长度的组,如64比特一组,用同一密钥和算法对每一组加密,输出也是固定长度的密文.对称性的加密算法包括美国标准56位密钥的DES,Triple-DES,3DES,变长度密钥的RC2和RC4,瑞士人发明的128位密钥的IDEA等.DES(Data Encryption Standard)是由IBM公司开发的最着名的数据加密算法,它的核心是乘积变换.美国于1997年将其定为非机密数据的正式加密标准.在过去20多年中,DES加密算法得到了广泛的研究,比其他任何密钥方案在硬件和软件中都得到了更多的应用.DES对64位二进制数据加密,产生64位密文数据,实际密钥长度为56位(有8位用于奇偶校验,解密时的过程和加密时相似,但密钥的顺序正好相反),其可能的密钥有256种,很难被破译.在银行业中的电子资金转账(EFT)领域中DES的应用获得成功.现在DES也可由硬件实现,AT&T首先用LSI芯片实现了DES的全部工作模式,该产品称为数据加密处理机DEP.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2.
RC4算法
RC4加密算法
RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右。
RC4算法的原理很简单,包括初始化算法和伪随机子密码生成算法两大部分。假设S-box长度和密钥长度均为为n。先来看看算法的初始化部分(用类C伪代码表示):
for (i=0; i<n; i++)
s[i]=i;
j=0;
for (i=0; i<n; i++)
{
j=(j+s[i]+k[i])%256;
swap(s[i], s[j]);
}
在初始化的过程中,密钥的主要功能是将S-box搅乱,i确保S-box的每个元素都得到处理,j保证S-box的搅乱是随机的。而不同的S-box在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,并且,该序列是随机的:
i=j=0;
while (明文未结束)
{
++i%=n;
j=(j+s[i])%n;
swap(s[i], s[j]);
sub_k=s((s[i]+s[j])%n);
}
得到的子密码sub_k用以和明文进行xor运算,得到密文,解密过程也完全相同。
由于RC4算法加密是采用的xor,所以,一旦子密钥序列出现了重复,密文就有可能被破解。关于如何破解xor加密,请参看Bruce Schneier的Applied Cryptography一书的1.4节Simple XOR,在此我就不细说了。那么,RC4算法生成的子密钥序列是否会出现重复呢?经过我的测试,存在部分弱密钥,使得子密钥序列在不到100万字节内就发生了完全的重复,如果是部分重复,则可能在不到10万字节内就能发生重复,因此,推荐在使用RC4算法时,必须对加密密钥进行测试,判断其是否为弱密钥。
但在2001年就有以色列科学家指出RC4加密算法存在着漏洞,这可能对无线通信网络的安全构成威胁。
以色列魏茨曼研究所和美国思科公司的研究者发现,在使用“有线等效保密规则”(WEP)的无线网络中,在特定情况下,人们可以逆转RC4算法的加密过程,获取密钥,从而将己加密的信息解密。实现这一过程并不复杂,只需要使用一台个人电脑对加密的数据进行分析,经过几个小时的时间就可以破译出信息的全部内容。
专家说,这并不表示所有使用RC4算法的软件都容易泄密,但它意味着RC4算法并不像人们原先认为的那样安全。这一发现可能促使人们重新设计无线通信网络,并且使用新的加密算法。

⑻ 银行家算法应用在哪些方面

只要是涉及多个独立个体对某种资源的动态申请和回收就可以应用此算法。在计算机科学中一般用此算法检测进程的推进顺序是否是安全队列,如果不是的话,会因为对资源的争夺而造成死锁。

阅读全文

与推荐算法用于银行相关的资料

热点内容
都市主角推到母亲姐姐姨妈的长篇小说 浏览:916
免费不用下载网站 浏览:893
可以播放的欧美男男电影 浏览:949
ldx218舵机用单片机控制 浏览:898
河南dns服务器地址大全 浏览:775
中字四级片 浏览:769
青岛本地服务器地址 浏览:987
白鹿原小说免费阅读 浏览:356
女主姓简的小说 浏览:210
提示命令符框 浏览:354
韩剧伦理女同都有哪些 浏览:35
高黄男男小说 浏览:503
华娱小说多女主的小说 浏览:747
收了杨玉环的历史小说 浏览:878
R语音命令 浏览:290
男人最新网址你懂的 浏览:572
怎么把文件夹放在电脑顶端 浏览:532
delphi入门pdf 浏览:418
岛国片app 浏览:955
电影院维语版。 浏览:298