javaee项目加密(文件加密 java)

今天给各位分享javaee项目加密的知识,其中也会对文件加密 java进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、java 目前市面上比较火的框架有哪些?2、eclipse javaee 怎么部署web项目3、求java加密源代码(MD5,base64)4、我想把java文件先加密然后打包,请高手指教怎么加密,有那种好的加密算法吗?5、javaee6怎么进行base64加密?

java 目前市面上比较火的框架有哪些?

Java 始终排在第一位,这使它成为有史以来最著名的软件编程语言之一。及时的更新和新版本发布使它成为一种充满活力的、有竞争力的编程语言。

2020年最常用的java框架

十大常用框架:

一、SpringMVC

二、Spring

三、Mybatis

四、Dubbo

五、Maven

六、RabbitMQ

七、Log4j

八、Ehcache

九、Redis

十、Shiro

一、SpringMVC

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。

模型(Model )封装了应用程序的数据和一般他们会组成的POJO。

视图(View)是负责呈现模型数据和一般它生成的HTML输出,客户端的浏览器能够解释。

控制器(Controller )负责处理用户的请求,并建立适当的模型,并把它传递给视图渲染。

Spring的web模型 – 视图 – 控制器(MVC)框架是围绕着处理所有的HTTP请求和响应的DispatcherServlet的设计。

Spring Web MVC处理请求的流程

请点击输入图片描述

具体执行步骤如下:

1、 首先用户发送请求————前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;图2-1中的1、2步骤;

2、 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在Spring Web MVC中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);图2-1中的3、4、5步骤;

3、 前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;图2-1中的步骤6、7;

4、 前端控制器再次收回控制权,将响应返回给用户,图2-1中的步骤8;至此整个结束。

二、Spring

2.1、IOC容器:

IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需直接在代码中new相关的对象,应用程序由IOC容器进行组装。在Spring中BeanFactory是IOC容器的实际代表者。

2.2、AOP:

简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系

AOP用来封装横切关注点,具体可以在下面的场景中使用:

Authentication 权限

Caching 缓存

Context passing 内容传递

Error handling 错误处理

Lazy loading 懒加载

Debugging 调试

logging, tracing, profiling and monitoring 记录跟踪 优化 校准

Performance optimization 性能优化

Persistence 持久化

Resource pooling 资源池

Synchronization 同步

Transactions 事务

三、Mybatis

MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

总体流程:

(1)加载配置并初始化

触发条件:加载配置文件

将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

(2)接收调用请求

触发条件:调用Mybatis提供的API

传入参数:为SQL的ID和传入参数对象

处理过程:将请求传递给下层的请求处理层进行处理。

(3)处理操作请求

触发条件:API接口层传递请求过来

传入参数:为SQL的ID和传入参数对象

处理过程:

(A)根据SQL的ID查找对应的MappedStatement对象。

(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。

©获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。

(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。

(E)释放连接资源。

(4)返回处理结果将最终的处理结果返回

MyBatis 最强大的特性之一就是它的动态语句功能。如果您以前有使用JDBC或者类似框架的经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。

四、Dubbo

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC(远程过程调用协议)远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架。

1、透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。

2、软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

3、 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

节点角色说明:

Provider: 暴露服务的服务提供方。

Consumer: 调用远程服务的服务消费方。

Registry: 服务注册与发现的注册中心。

Monitor: 统计服务的调用次调和调用时间的监控中心。

Container: 服务运行容器。

五、Maven

Maven这个个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目中的jar包。但是对于我们程序员来说,我们最关心的是它的项目构建功能。

六、RabbitMQ

消息队列一般是在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。

RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。

Erlang是一门动态类型的函数式编程语言。对应到Erlang里,每个Actor对应着一个Erlang进程,进程之间通过消息传递进行通信。相比共享内存,进程间通过消息传递来通信带来的直接好处就是消除了直接的锁开销(不考虑Erlang虚拟机底层实现中的锁应用)。

AMQP(Advanced Message Queue Protocol)定义了一种消息系统规范。这个规范描述了在一个分布式的系统中各个子系统如何通过消息交互。

七、Log4j

日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。

八、Ehcache

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

优点:

1、 快速

2、 简单

3、 多种缓存策略

4、缓存数据有两级:内存和磁盘,因此无需担心容量问题

5、 缓存数据会在虚拟机重启的过程中写入磁盘

6、可以通过RMI、可插入API等方式进行分布式缓存

7、 具有缓存和缓存管理器的侦听接口

8、支持多缓存管理器实例,以及一个实例的多个缓存区域

9、提供Hibernate的缓存实现

缺点:

1、使用磁盘Cache的时候非常占用磁盘空间:这是因为DiskCache的算法简单,该算法简单也导致Cache的效率非常高。它只是对元素直接追加存储。因此搜索元素的时候非常的快。如果使用DiskCache的,在很频繁的应用中,很快磁盘会满。

2、不能保证数据的安全:当突然kill掉java的时候,可能会产生冲突,EhCache的解决方法是如果文件冲突了,则重建cache。这对于Cache数据需要保存的时候可能不利。当然,Cache只是简单的加速,而不能保证数据的安全。如果想保证数据的存储安全,可以使用Bekeley DB Java Edition版本。这是个嵌入式数据库。可以确保存储安全和空间的利用率。

九、Redis

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis数据库完全在内存中,使用磁盘仅用于持久性。相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。Redis可以将数据复制到任意数量的从服务器。

1.2、Redis优点:

(1)异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。

(2)支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。这使得它非常容易解决各种各样的问题,因为我们知道哪些问题是可以处理通过它的数据类型更好。

(3)操作都是原子性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。

(4)多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如Web应用程序会话,网页命中计数等。

1.3、Redis缺点:

(1)单线程

(2)耗内存

十、Shiro

Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权。Shiro在JavaSE和JavaEE项目中都可以使用。它主要用来处理身份认证,授权,企业会话管理和加密等。Shiro的具体功能点如下:

(1)身份认证/登录,验证用户是不是拥有相应的身份;

(2)授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;

(3)会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;

(4)加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;

(5)Web支持,可以非常容易的集成到Web环境;

Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;

(6)shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;

(7)提供测试支持;

(8)允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;

(9)记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。

文字描述可能并不能让猿友们完全理解具体功能的意思。下面我们以登录验证为例,向猿友们介绍Shiro的使用。至于其他功能点,猿友们用到的时候再去深究其用法也不迟。

十一、设计模式

这个算不上框架,可自行忽略,不过我认为设计模式的思想很有必要了解一下。

思想:

开闭原则:

开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码。

针对接口编程,针对接口编程,依赖于抽象而不依赖于具体。

尽量使用合成/聚合的方式,而不是使用继承。

一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

使用多个隔离的接口,比使用单个接口要好。

里氏代换原则:

(1)子类的能力必须大于等于父类,即父类可以使用的方法,子类都可以使用。

(2)返回值也是同样的道理。假设一个父类方法返回一个List,子类返回一个ArrayList,这当然可以。如果父类方法返回一个ArrayList,子类返回一个List,就说不通了。这里子类返回值的能力是比父类小的。

(3)还有抛出异常的情况。任何子类方法可以声明抛出父类方法声明异常的子类。 而不能声明抛出父类没有声明的异常。

javaee项目加密(文件加密 java)

eclipse javaee 怎么部署web项目

方法如下:

1.首先点击Eclipse右上角的Java EE(默认是在Java状态下的)

2.转换后的效果, 出现Project Explorer

3.在other中选择 Java – Package Explorer

4.调出的面板默认在Eclipse的中间下部

5.把它拖拽到左侧的栏目中就可以新建web工程进行开发了

求java加密源代码(MD5,base64)

import java.security.*;

import javax.crypto.*;

/**

* 本例解释如何利用DES私钥加密算法加解密

*

* @author Devon

* @version 1.0 04/03/10

*/

public class SingleKeyExample {

public static void main(String[] args) {

try {

String algorithm = “DES”; //定义加密算法,可用 DES,DESede,Blowfish

String message = “Hello World. 这是待加密的信息”;

// 生成个DES密钥

KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm);

keyGenerator.init(56); //选择DES算法,密钥长度必须为56位

Key key = keyGenerator.generateKey(); //生成密钥

// 生成Cipher对象

Cipher cipher = Cipher.getInstance(“DES”);

//用密钥加密明文(message),生成密文(cipherText)

cipher.init(Cipher.ENCRYPT_MODE, key); //操作模式为加密(Cipher.ENCRYPT_MODE),key为密钥

byte[] cipherText = cipher.doFinal(message.getBytes()); //得到加密后的字节数组

System.out.println(“加密后的信息: ” + new String(cipherText));

//用密钥加密明文(plainText),生成密文(cipherByte)

cipher.init(Cipher.DECRYPT_MODE, key); //操作模式为解密,key为密钥

byte[] sourceText = cipher.doFinal(cipherText); //获得解密后字节数组

System.out.println(“解密后的信息: ” + new String(sourceText));

} catch (Exception ex) {

ex.printStackTrace();

}

}

}

/**

* @author Devon

*/

import java.security.*;

import java.security.spec.*;

import javax.crypto.*;

public class PairKeyExample {

public static void main(String argv[]) {

try {

String algorithm = “RSA”; //定义加密算法,可用 DES,DESede,Blowfish

String message = “张三,你好,我是李四”;

//产生张三的密钥对(keyPairZhang)

KeyPairGenerator keyGeneratorZhang =

KeyPairGenerator.getInstance(algorithm); //指定采用的算法

keyGeneratorZhang.initialize(1024); //指定密钥长度为1024位

KeyPair keyPairZhang = keyGeneratorZhang.generateKeyPair(); //产生密钥对

System.out.println(“生成张三的公钥对”);

// 张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节

byte[] publicKeyZhangEncode = keyPairZhang.getPublic().getEncoded();

//通过网络或磁盘等方式,把公钥编码传送给李四

//李四接收到张三编码后的公钥,将其解码

KeyFactory keyFacoryLi = KeyFactory.getInstance(algorithm); //得到KeyFactory对象

X509EncodedKeySpec x509KeySpec =

new X509EncodedKeySpec(publicKeyZhangEncode); //公钥采用X.509编码

PublicKey publicKeyZhang = keyFacoryLi.generatePublic(x509KeySpec); //将公钥的KeySpec对象转换为公钥

System.out.println(“李四成功解码,得到张三的公钥”);

//李四用张三的公钥加密信息,并发送给李四

Cipher cipher = Cipher.getInstance(“RSA/ECB/PKCS1Padding”); //得到Cipher对象

cipher.init(Cipher.ENCRYPT_MODE, publicKeyZhang); //用张三的公钥初始化Cipher对象

byte[] cipherMessage = cipher.doFinal(message.getBytes()); //得到加密信息

System.out.println(“加密后信息:” + new String(cipherMessage));

System.out.println(“加密完成,发送给李四…”);

//张三用自己的私钥解密从李四处收到的信息

cipher.init(Cipher.DECRYPT_MODE, keyPairZhang.getPrivate()); //张三用其私钥初始化Cipher对象

byte[] originalMessage = cipher.doFinal(cipherMessage); //得到解密后信息

System.out.println(“张三收到信息,解密后为:” + new String(originalMessage));

} catch (Exception ex) {

ex.printStackTrace();

}

}

}

我想把java文件先加密然后打包,请高手指教怎么加密,有那种好的加密算法吗?

RSA算法非常简单,概述如下:

找两素数p和q

取n=p*q

取t=(p-1)*(q-1)

取任何一个数e,要求满足et并且e与t互素(就是最大公因数为1)

取d*e%t==1

这样最终得到三个数: n d e

设消息为数M (M n)

设c=(M**d)%n就得到了加密后的消息c

设m=(c**e)%n则 m == M,从而完成对c的解密。

注:**表示次方,上面两式中的d和e可以互换。

在对称加密中:

n d两个数构成公钥,可以告诉别人;

n e两个数构成私钥,e自己保留,不让任何人知道。

给别人发送的信息使用e加密,只要别人能用d解开就证明信息是由你发送的,构成了签名机制。

别人给你发送信息时使用d加密,这样只有拥有e的你能够对其解密。

rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解

从而在已知n d的情况下无法获得e;同样在已知n e的情况下无法

求得d。

二实践

接下来我们来一个实践,看看实际的操作:

找两个素数:

p=47

q=59

这样

n=p*q=2773

t=(p-1)*(q-1)=2668

取e=63,满足et并且e和t互素

用perl简单穷举可以获得满主 e*d%t ==1的数d:

C:\Tempperl -e “foreach $i (1..9999){ print($i),last if $i*63%2668==1 }”

847

即d=847

最终我们获得关键的

n=2773

d=847

e=63

取消息M=244我们看看

加密:

c=M**d%n = 244**847%2773

用perl的大数计算来算一下:

C:\Tempperl -Mbigint -e “print 244**847%2773”

465

即用d对M加密后获得加密信息c=465

解密:

我们可以用e来对加密后的c进行解密,还原M:

m=c**e%n=465**63%2773 :

C:\Tempperl -Mbigint -e “print 465**63%2773”

244

即用e对c解密后获得m=244 , 该值和原始信息M相等。

三字符串加密

把上面的过程集成一下我们就能实现一个对字符串加密解密的示例了。

每次取字符串中的一个字符的ascii值作为M进行计算,其输出为加密后16进制

的数的字符串形式,按3字节表示,如01F

代码如下:

#!/usr/bin/perl -w

#RSA 计算过程学习程序编写的测试程序

#watercloud 2003-8-12

#

use strict;

use Math::BigInt;

my %RSA_CORE = (n=2773,e=63,d=847); #p=47,q=59

my $N=new Math::BigInt($RSA_CORE{n});

my $E=new Math::BigInt($RSA_CORE{e});

my $D=new Math::BigInt($RSA_CORE{d});

print “N=$N D=$D E=$E\n”;

sub RSA_ENCRYPT

{

my $r_mess = shift @_;

my ($c,$i,$M,$C,$cmess);

for($i=0;$i length($$r_mess);$i++)

{

$c=ord(substr($$r_mess,$i,1));

$M=Math::BigInt-new($c);

$C=$M-copy(); $C-bmodpow($D,$N);

$c=sprintf “%03X”,$C;

$cmess.=$c;

}

return \$cmess;

}

sub RSA_DECRYPT

{

my $r_mess = shift @_;

my ($c,$i,$M,$C,$dmess);

for($i=0;$i length($$r_mess);$i+=3)

{

$c=substr($$r_mess,$i,3);

$c=hex($c);

$M=Math::BigInt-new($c);

$C=$M-copy(); $C-bmodpow($E,$N);

$c=chr($C);

$dmess.=$c;

}

return \$dmess;

}

my $mess=”RSA 娃哈哈哈~~~”;

$mess=$ARGV[0] if @ARGV = 1;

print “原始串:”,$mess,”\n”;

my $r_cmess = RSA_ENCRYPT(\$mess);

print “加密串:”,$$r_cmess,”\n”;

my $r_dmess = RSA_DECRYPT($r_cmess);

print “解密串:”,$$r_dmess,”\n”;

#EOF

测试一下:

C:\Tempperl rsa-test.pl

N=2773 D=847 E=63

原始串:RSA 娃哈哈哈~~~

加密串:5CB6CD6BC58A7709470AA74A0AA74A0AA74A6C70A46C70A46C70A4

解密串:RSA 娃哈哈哈~~~

C:\Tempperl rsa-test.pl 安全焦点(xfocus)

N=2773 D=847 E=63

原始串:安全焦点(xfocus)

加密串:3393EC12F0A466E0AA9510D025D7BA0712DC3379F47D51C325D67B

解密串:安全焦点(xfocus)

四提高

前面已经提到,rsa的安全来源于n足够大,我们测试中使用的n是非常小的,根本不能保障安全性,

我们可以通过RSAKit、RSATool之类的工具获得足够大的N 及D E。

通过工具,我们获得1024位的N及D E来测试一下:

n=0x328C74784DF31119C526D18098EBEBB943B0032B599CEE13CC2BCE7B5FCD15F90B66EC3A85F5005D

BDCDED9BDFCB3C4C265AF164AD55884D8278F791C7A6BFDAD55EDBC4F017F9CCF1538D4C2013433B383B

47D80EC74B51276CA05B5D6346B9EE5AD2D7BE7ABFB36E37108DD60438941D2ED173CCA50E114705D7E2

BC511951

d=0x10001

e=0xE760A3804ACDE1E8E3D7DC0197F9CEF6282EF552E8CEBBB7434B01CB19A9D87A3106DD28C523C2995

4C5D86B36E943080E4919CA8CE08718C3B0930867A98F635EB9EA9200B25906D91B80A47B77324E66AFF2

C4D70D8B1C69C50A9D8B4B7A3C9EE05FFF3A16AFC023731D80634763DA1DCABE9861A4789BD782A592D2B

1965

设原始信息

M=0x11111111111122222222222233333333333

完成这么大数字的计算依赖于大数运算库,用perl来运算非常简单:

A) 用d对M进行加密如下:

c=M**d%n :

C:\Tempperl -Mbigint -e ” $x=Math::BigInt-bmodpow(0x11111111111122222222222233

333333333, 0x10001, 0x328C74784DF31119C526D18098EBEBB943B0032B599CEE13CC2BCE7B5F

CD15F90B66EC3A85F5005DBDCDED9BDFCB3C4C265AF164AD55884D8278F791C7A6BFDAD55EDBC4F0

17F9CCF1538D4C2013433B383B47D80EC74B51276CA05B5D6346B9EE5AD2D7BE7ABFB36E37108DD6

0438941D2ED173CCA50E114705D7E2BC511951);print $x-as_hex”

0x17b287be418c69ecd7c39227ab681ac422fcc84bb35d8a632543b304de288a8d4434b73d2576bd

45692b007f3a2f7c5f5aa1d99ef3866af26a8e876712ed1d4cc4b293e26bc0a1dc67e247715caa6b

3028f9461a3b1533ec0cb476441465f10d8ad47452a12db0601c5e8beda686dd96d2acd59ea89b91

f1834580c3f6d90898

即用d对M加密后信息为:

c=0x17b287be418c69ecd7c39227ab681ac422fcc84bb35d8a632543b304de288a8d4434b73d2576bd

45692b007f3a2f7c5f5aa1d99ef3866af26a8e876712ed1d4cc4b293e26bc0a1dc67e247715caa6b

3028f9461a3b1533ec0cb476441465f10d8ad47452a12db0601c5e8beda686dd96d2acd59ea89b91

f1834580c3f6d90898

B) 用e对c进行解密如下:

m=c**e%n :

C:\Tempperl -Mbigint -e ” $x=Math::BigInt-bmodpow(0x17b287be418c69ecd7c39227ab

681ac422fcc84bb35d8a632543b304de288a8d4434b73d2576bd45692b007f3a2f7c5f5aa1d99ef3

866af26a8e876712ed1d4cc4b293e26bc0a1dc67e247715caa6b3028f9461a3b1533ec0cb4764414

65f10d8ad47452a12db0601c5e8beda686dd96d2acd59ea89b91f1834580c3f6d90898, 0xE760A

3804ACDE1E8E3D7DC0197F9CEF6282EF552E8CEBBB7434B01CB19A9D87A3106DD28C523C29954C5D

86B36E943080E4919CA8CE08718C3B0930867A98F635EB9EA9200B25906D91B80A47B77324E66AFF

2C4D70D8B1C69C50A9D8B4B7A3C9EE05FFF3A16AFC023731D80634763DA1DCABE9861A4789BD782A

592D2B1965, 0x328C74784DF31119C526D18098EBEBB943B0032B599CEE13CC2BCE7B5FCD15F90

B66EC3A85F5005DBDCDED9BDFCB3C4C265AF164AD55884D8278F791C7A6BFDAD55EDBC4F017F9CCF

1538D4C2013433B383B47D80EC74B51276CA05B5D6346B9EE5AD2D7BE7ABFB36E37108DD60438941

D2ED173CCA50E114705D7E2BC511951);print $x-as_hex”

0x11111111111122222222222233333333333

(我的P4 1.6G的机器上计算了约5秒钟)

得到用e解密后的m=0x11111111111122222222222233333333333 == M

C) RSA通常的实现

RSA简洁幽雅,但计算速度比较慢,通常加密中并不是直接使用RSA 来对所有的信息进行加密,

最常见的情况是随机产生一个对称加密的密钥,然后使用对称加密算法对信息加密,之后用

RSA对刚才的加密密钥进行加密。

最后需要说明的是,当前小于1024位的N已经被证明是不安全的

自己使用中不要使用小于1024位的RSA,最好使用2048位的。

———————————————————-

一个简单的RSA算法实现JAVA源代码:

filename:RSA.java

/*

* Created on Mar 3, 2005

*

* TODO To change the template for this generated file go to

* Window – Preferences – Java – Code Style – Code Templates

*/

import java.math.BigInteger;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.FileWriter;

import java.io.FileReader;

import java.io.BufferedReader;

import java.util.StringTokenizer;

/**

* @author Steve

*

* TODO To change the template for this generated type comment go to

* Window – Preferences – Java – Code Style – Code Templates

*/

public class RSA {

/**

* BigInteger.ZERO

*/

private static final BigInteger ZERO = BigInteger.ZERO;

/**

* BigInteger.ONE

*/

private static final BigInteger ONE = BigInteger.ONE;

/**

* Pseudo BigInteger.TWO

*/

private static final BigInteger TWO = new BigInteger(“2”);

private BigInteger myKey;

private BigInteger myMod;

private int blockSize;

public RSA (BigInteger key, BigInteger n, int b) {

myKey = key;

myMod = n;

blockSize = b;

}

public void encodeFile (String filename) {

byte[] bytes = new byte[blockSize / 8 + 1];

byte[] temp;

int tempLen;

InputStream is = null;

FileWriter writer = null;

try {

is = new FileInputStream(filename);

writer = new FileWriter(filename + “.enc”);

}

catch (FileNotFoundException e1){

System.out.println(“File not found: ” + filename);

}

catch (IOException e1){

System.out.println(“File not found: ” + filename + “.enc”);

}

/**

* Write encoded message to ‘filename’.enc

*/

try {

while ((tempLen = is.read(bytes, 1, blockSize / 8)) 0) {

for (int i = tempLen + 1; i bytes.length; ++i) {

bytes[i] = 0;

}

writer.write(encodeDecode(new BigInteger(bytes)) + ” “);

}

}

catch (IOException e1) {

System.out.println(“error writing to file”);

}

/**

* Close input stream and file writer

*/

try {

is.close();

writer.close();

}

catch (IOException e1) {

System.out.println(“Error closing file.”);

}

}

public void decodeFile (String filename) {

FileReader reader = null;

OutputStream os = null;

try {

reader = new FileReader(filename);

os = new FileOutputStream(filename.replaceAll(“.enc”, “.dec”));

}

catch (FileNotFoundException e1) {

if (reader == null)

System.out.println(“File not found: ” + filename);

else

System.out.println(“File not found: ” + filename.replaceAll(“.enc”, “dec”));

}

BufferedReader br = new BufferedReader(reader);

int offset;

byte[] temp, toFile;

StringTokenizer st = null;

try {

while (br.ready()) {

st = new StringTokenizer(br.readLine());

while (st.hasMoreTokens()){

toFile = encodeDecode(new BigInteger(st.nextToken())).toByteArray();

System.out.println(toFile.length + ” x ” + (blockSize / 8));

if (toFile[0] == 0 toFile.length != (blockSize / 8)) {

temp = new byte[blockSize / 8];

offset = temp.length – toFile.length;

for (int i = toFile.length – 1; (i = 0) ((i + offset) = 0); –i) {

temp[i + offset] = toFile[i];

}

toFile = temp;

}

/*if (toFile.length != ((blockSize / 8) + 1)){

temp = new byte[(blockSize / 8) + 1];

System.out.println(toFile.length + ” x ” + temp.length);

for (int i = 1; i temp.length; i++) {

temp[i] = toFile[i – 1];

}

toFile = temp;

}

else

System.out.println(toFile.length + ” ” + ((blockSize / 8) + 1));*/

os.write(toFile);

}

}

}

catch (IOException e1) {

System.out.println(“Something went wrong”);

}

/**

* close data streams

*/

try {

os.close();

reader.close();

}

catch (IOException e1) {

System.out.println(“Error closing file.”);

}

}

/**

* Performs ttbase/tt^supttpow/tt/sup within the modular

* domain of ttmod/tt.

*

* @param base the base to be raised

* @param pow the power to which the base will be raisded

* @param mod the modular domain over which to perform this operation

* @return ttbase/tt^supttpow/tt/sup within the modular

* domain of ttmod/tt.

*/

public BigInteger encodeDecode(BigInteger base) {

BigInteger a = ONE;

BigInteger s = base;

BigInteger n = myKey;

while (!n.equals(ZERO)) {

if(!n.mod(TWO).equals(ZERO))

a = a.multiply(s).mod(myMod);

s = s.pow(2).mod(myMod);

n = n.divide(TWO);

}

return a;

}

}

在这里提供两个版本的RSA算法JAVA实现的代码下载:

1. 来自于 的RSA算法实现源代码包:

2. 来自于 的实现:

– 源代码包

– 编译好的jar包

另外关于RSA算法的php实现请参见文章:

php下的RSA算法实现

关于使用VB实现RSA算法的源代码下载(此程序采用了psc1算法来实现快速的RSA加密):

RSA加密的JavaScript实现:

参考资料:

javaee6怎么进行base64加密?

package com.raqsoft.common;

public class Base64

{

private static final char intToBase64[] = {

‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’,

‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’,

‘U’, ‘V’, ‘W’, ‘X’, ‘Y’, ‘Z’, ‘a’, ‘b’, ‘c’, ‘d’,

‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’,

‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’,

‘y’, ‘z’, ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’,

‘8’, ‘9’, ‘+’, ‘/’

};

private static final char intToAltBase64[] = {

‘!’, ‘”‘, ‘#’, ‘$’, ‘%’, ”, ‘\”, ‘(‘, ‘)’, ‘,’,

‘-‘, ‘.’, ‘:’, ‘;’, ”, ”, ‘@’, ‘[‘, ‘]’, ‘^’,

‘`’, ‘_’, ‘{‘, ‘|’, ‘}’, ‘~’, ‘a’, ‘b’, ‘c’, ‘d’,

‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’,

‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’,

‘y’, ‘z’, ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’,

‘8’, ‘9’, ‘+’, ‘?’

};

private static final byte base64ToInt[] = {

-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,

-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,

-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,

-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,

-1, -1, -1, 62, -1, -1, -1, 63, 52, 53,

54, 55, 56, 57, 58, 59, 60, 61, -1, -1,

-1, -1, -1, -1, -1, 0, 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, -1, -1, -1, -1, -1, -1, 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

};

private static final byte altBase64ToInt[] = {

-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,

-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,

-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,

-1, -1, -1, 0, 1, 2, 3, 4, 5, 6,

7, 8, -1, 62, 9, 10, 11, -1, 52, 53,

54, 55, 56, 57, 58, 59, 60, 61, 12, 13,

14, -1, 15, 63, 16, -1, -1, -1, -1, -1,

-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,

-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,

-1, 17, -1, 18, 19, 21, 20, 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, 22, 23, 24, 25

};

public static String byteArrayToBase64(byte bb[]) {

return byteArrayToBase64(bb, false);

}

public static String byteArrayToAltBase64(byte bb[]){

return byteArrayToBase64(bb, true);

}

private static String byteArrayToBase64(byte bb[], boolean flag) {

int i = bb.length;

int j = i / 3;

int k = i – 3 * j;

int l = 4 * ((i + 2) / 3);

StringBuffer stringbuffer = new StringBuffer(l);

char ac[] = flag ? intToAltBase64 : intToBase64;

int i1 = 0;

for(int j1 = 0; j1 j; j1++) {

int k1 = bb[i1++] 0xff;

int i2 = bb[i1++] 0xff;

int k2 = bb[i1++] 0xff;

stringbuffer.append(ac[k1 2]);

stringbuffer.append(ac[k1 4 0x3f | i2 4]);

stringbuffer.append(ac[i2 2 0x3f | k2 6]);

stringbuffer.append(ac[k2 0x3f]);

}

if(k != 0) {

int l1 = bb[i1++] 0xff;

stringbuffer.append(ac[l1 2]);

if(k == 1) {

stringbuffer.append(ac[l1 4 0x3f]);

stringbuffer.append(“==”);

} else {

int j2 = bb[i1++] 0xff;

stringbuffer.append(ac[l1 4 0x3f | j2 4]);

stringbuffer.append(ac[j2 2 0x3f]);

stringbuffer.append(‘=’);

}

}

return stringbuffer.toString();

}

public static byte[] base64ToByteArray(String s) {

return base64ToByteArray(s, false);

}

public static byte[] altBase64ToByteArray(String s) {

return base64ToByteArray(s, true);

}

private static byte[] base64ToByteArray(String s, boolean flag){

byte bb[] = flag ? altBase64ToInt : base64ToInt;

int i = s.length();

int j = i / 4;

if(4 * j != i)

throw new IllegalArgumentException(“String length must be a multiple of four.”);

int k = 0;

int l = j;

if(i != 0) {

if(s.charAt(i – 1) == ‘=’) {

k++;

l–;

}

if(s.charAt(i – 2) == ‘=’)

k++;

}

byte bc[] = new byte[3 * j – k];

int i1 = 0;

int j1 = 0;

for(int k1 = 0; k1 l; k1++) {

int l1 = base64toInt(s.charAt(i1++), bb);

int j2 = base64toInt(s.charAt(i1++), bb);

int l2 = base64toInt(s.charAt(i1++), bb);

int j3 = base64toInt(s.charAt(i1++), bb);

bc[j1++] = (byte)(l1 2 | j2 4);

bc[j1++] = (byte)(j2 4 | l2 2);

bc[j1++] = (byte)(l2 6 | j3);

}

if(k != 0) {

int i2 = base64toInt(s.charAt(i1++), bb);

int k2 = base64toInt(s.charAt(i1++), bb);

bc[j1++] = (byte)(i2 2 | k2 4);

if(k == 1) {

int i3 = base64toInt(s.charAt(i1++), bb);

bc[j1++] = (byte)(k2 4 | i3 2);

}

}

return bc;

}

private static int base64toInt(char c, byte bb[]) {

byte b = bb[c];

if(b 0)

throw new IllegalArgumentException(“Illegal character ” + c);

else

return b;

}

public static void main(String[] args) {

String s = “0123456789”;

byte[] b = s.getBytes();

s = Base64.byteArrayToBase64(b);

System.out.println(s);

b = Base64.base64ToByteArray(s);

System.out.println(new String(b));

}

}

javaee项目加密的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于文件加密 java、javaee项目加密的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月2日 00:55:44
下一篇 2024年4月2日 01:01:52

相关推荐

  • aspexcel未找到项目,xlsread未找到工作表

    ASP读取EXCEL有某一列的数据读取不到,显示为空? 1、可以考虑采用“ewebeditor”控件,我用的asp版本,刚好在做一个excel倒入项目,不过还在纠结如何读取xls中单元格内容的超链接。 2、if not (rsexcel.bof and rsexcel.eof)while do 比较乱。我模仿你的思路成功了。 3、rst(语文)=rs(2)r…

    2024年5月23日
    4600
  • java获取项目上传路径,java获取项目根路径

    java获取当前项目的路径 在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 也可以选用System.getProperty(user.dir)获取工程的绝对路径。 getClass().getResource() 方法获得相对路径( 此方法在jar包中无效。 File类有两个常用方法可以得到文件…

    2024年5月23日
    4300
  • java中ra项目,idea创建java项目

    用java定义一个一维数组,其中随机生成500个1到50之间整数,输出出现最多… Math类的random()方法可以生成[0,1)之间的随机浮点数。double类型数据强制转换成int类型,整数部分赋值给int类型变量,小数点之后的小数部分将会丢失。int b=(int)(Math.random()*10);//生成[0,9]之间的随机整数。 …

    2024年5月22日
    3900
  • java项目经验模板,Java项目经验

    Java软件开发工程师个人简历模板 1、扎实的JAVA基础知识,熟悉面向对象编程思想,熟练MVC设计模式。 2、年应届毕业生个人简历模板(一) 姓名:xxx 性别:xx 年龄:xx 学历:本科 毕业院校:xxx 专业:xxx 电子邮箱:xxx 联系电话:xxx 通信地址:xxx 毕业院校:xxx 主修课程: 汇编语言程序设计、JAVA程序设计、数据库原理、操…

    2024年5月22日
    5200
  • linuxfile加密,linux文件加密

    linux下文件加密有哪些方式,能通过系统调用函数把加密的文件内容读出… 1、linux文件加密需要分五步进行,下面是具体介绍: 进入linux系统,打开待加密文件;进入命令模式,输入大写字母X;点击回车输入密码;命令模式输入w,、回车确定;打开文件vibase.sh,即可加密成功。 2、要打开现有的加密文件夹,请单击Cryptkeeper指示器…

    2024年5月22日
    4600
  • jboss开机自动启动linux,linux开机自启动java项目

    linux设置开机自启动脚本的最佳方式 1、使用systemctl工具:这是Linux系统中推荐的配置服务开机启动的方式,但是您提到在V10系统中systemctl无法正常启动服务,所以此方法不适用。 2、修改开机启动文件:/etc/rc.local(或者/etc/rc.d/rc.local)自己写一个shell脚本 将写好的脚本(.sh文件)放到目录 /e…

    2024年5月22日
    4600
  • idea切换java版本,idea项目切换jdk

    idea中如何指定java目录 我是这样做的 我先在D盘新建了一个叫java idea的文件夹,然后在idea创建java项目时,如果只改项目名,idea只会在D盘里直接新建一个和项目名同名的文件夹,所以先不改项目名。 intellijidea配置jdk的详细操作方法首先点击File下的Project的菜单。再点击SDKs这个选项开始指定jdk的位置。若是第…

    2024年5月22日
    5400
  • 包含javaee中的css文件的词条

    JavaEE中如何把CSS模板导入Web工程 1、首先在eclipse(散仙这里是2)里,新建一个动态的Web工程。 2、点击html文件,右键-重命名,修改成.jsp文件。把.jsp文件导入工程中发布到web容器。运行工程,用http://localhost:8080/test.jsp来访问。 3、在开始标签中添加斜杠,比如:就是没有关闭标签的空元素,而是…

    2024年5月22日
    4600
  • javaweb项目引用不到lib下的包,idea引用不到本地的jar

    java项目导入jar包 是的,Java中的StringEntity类是org.apache.http.entity.StringEntity,属于Apache HttpClient库的一部分,因此在使用它之前,需要将HttpClient的jar包导入到您的项目中。 方法一:直接复制想要的jar包,之后找到项目的lib路径,之后“Ctrl+v”粘贴进行就可以…

    2024年5月22日
    4100
  • javaweb母版,javaweb项目模板

    javaEE和javaweb的区别? 1、JavaSE(JavaPlatform,StandardEdition)。JavaSE以前称为J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java应用程序。 2、你说的javaee就是j2ee,与j2se,j2me并列,j2ee是java面向企业级应用推出的一套规范,说白了就是用于开发服务器…

    2024年5月22日
    5300

发表回复

登录后才能评论



关注微信