javarc4加密算法
⑴ SSL/TLS协议原理解读
HTTPS是什么相信大家都知道,如果你不知道。。。请关闭此文!!!
HTTP的数据是明文传输的,没有安全性可言。HTTPS是秘文传输,那么HTTPS是怎么实现数据的安全(加密)传输的?那是因为HTTPS比HTTP多了个'S'。 即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
SSL/TLS协议是网络安全通信的重要基石,本文将简单介绍SSL/TLS协议,主要关注SSL/TLS协议的安全性,特别是SSL规范的正确实现。 本系列的文章大体分为几个部分:
1、SSL/TLS简介
2、SSL/TLS协议的基本流程
3、从SSL到TLS
4、SSL/TLS的流行实现库
SSL全称是Secure Sockets Layer,安全套接字层,它是由网景公司(Netscape)设计的主要用于Web的安全传输协议,目的是为网络通信提供机密性、认证性及数据完整性保障。如今,SSL已经成为互联网保密通信的工业标准。
SSL最初的几个版本(SSL 1.0、SSL2.0、SSL 3.0)由网景公司设计和维护,从3.1版本开始,SSL协议由因特网工程任务小组(IETF)正式接管,并更名为TLS(Transport Layer Security),发展至今已有TLS 1.0、TLS1.1、TLS1.2这几个版本。
如TLS名字所说,SSL/TLS协议仅保障传输层安全。同时,由于协议自身特性(数字证书机制),SSL/TLS不能被用于保护多跳(multi-hop)端到端通信,而只能保护点到点通信。
SSL/TLS协议能够提供的安全目标主要包括如下几个:
认证性——借助数字证书认证服务器端和客户端身份,防止身份伪造
机密性——借助加密防止第三方窃听
完整性——借助消息认证码(MAC)保障数据完整性,防止消息篡改
重放保护——通过使用隐式序列号防止重放攻击
为了实现这些安全目标,SSL/TLS协议被设计为一个两阶段协议,分为握手阶段和应用阶段:
握手阶段也称协商阶段,在这一阶段,客户端和服务器端会认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及MasterSecret。后续通信使用的所有密钥都是通过MasterSecret生成。
在握手阶段完成后,进入应用阶段。在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信。
Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换;
ChangeCipherSpec 协议:一条消息表明握手协议已经完成;
Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型的错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告;
Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等。
图2、图3都是表示的协议流程,大同小异。可以对比着看加深理解。
每一个SSL/TLS链接都是从握手开始的,握手过程包含一个消息序列,用以协商安全参数、密码套件,进行身份认证以及密钥交换。握手过程中的消息必须严格按照预先定义的顺序发生,否则就会带来潜在的安全威胁。今年顶级安全会议CCS 有文章提出了建立综合状态机来检查SSL链接中消息序列……
2.1 握手过程中的消息序列
ClientHello:ClientHello通常是握手过程中的第一条消息,用于告知服务器客户端所支持的密码套件种类、最高SSL/TLS协议版本以及压缩算法。
ClientHello中还包含一个随机数,这个随机数由4个字节的当前GMT UNIX时间以及28个随机选择的字节组成,共32字节。该随机数会在密钥生成过程中被使用。
另外,ClientHello中还可能包含客户端支持的TLS扩展。(TLS扩展可以被用来丰富TLS协议的功能或者增强协议的安全性)
ServerHello:服务器接受到ClientHello后,会返回ServerHello。服务器从客户端在ClientHello中提供的密码套件、SSL/TLS版本、压缩算法列表里选择它所支持的项,并把它的选择包含在ServerHello中告知客户端。接下来SSL协议的建立就基于服务器选择的密码套件类型、SSL/TLS协议版本以及压缩算法。
ServerHello中同样会包含一个随机数,同样4+28 字节类型,由服务器生成。
Certificate:客户端和服务器都可以发送证书消息来证明自己的身份,但是通常客户端证书不被使用。 服务器一般在ServerHello后会接一条Certificate消息,Certificate消息中会包含一条证书链,从服务器证书开始,到Certificate authority(CA)或者最新的自签名证书结束。下图形象地描述了证书链:
SSL中使用的证书通常是X.509类型证书,X.509证书的内容如下表所示:
在用的X.509证书包含Version 1和Version 3两种版本,其中v1版本的证书存在安全隐患,同时不支持TLS扩展,被逐渐弃用。现在大多数在用的SSL证书都是V3版本。
同时证书会附带与协商好的密钥交换算法对应的密钥。密钥交换算法以及它们所要求的密钥类型如下表所示。
ServerKeyExchange:该消息仅当以下密钥交换算法被使用时由服务器发出:
RSA_EXPORT(仅当服务器的公钥大于512bit时)、DHE_DSS、DHE_DSS_EXPORT、DHE_RSA、DHE_RSA_EXPORT、DH_anon 使用其它密钥交换算法时,服务器不能发送此消息。
ServerkeyExchange消息会携带这些密钥交换算法所需要的额外参数,以在后续步骤中协商PreMasterSecret。这些参数需要被签过名。
CertificateRequest:这个消息通常在要求认证客户端身份时才会有。消息中包含了证书类型以及可接受的CA列表。
ServerHelloDone:服务器发送这条消息表明服务器部分的密钥交换信息已经发送完了,等待客户端的消息以继续接下来的步骤。这条消息只用作提醒,不包含数据域。
ClientKeyExchange:这条消息包含的数据与所选用的密钥交换算法有关。
如果选择的密钥交换算法是RSA,那么消息包含的参数为用服务器RSA公钥(包含在之前证书中的或者是ServerKeyExchange中的)加密过的PreMasterSecret,它有48个字节,前2个字节表示客户端支持的最高协议版本,后46个字节是随机选择的。
如果选择的密钥交换算法是DH或者DHE,则可能有两种情况:
隐式DH公开值:包含在Certificate消息里;
显示DH公开值:公开值是本消息的一部分。
CertificateVerify:这条消息用来证明客户端拥有之前提交的客户端证书的私钥。
Finished:表明握手阶段结束。这是第一条用协商的算法和密钥保护的消息。
因为是用协商好的密钥加密的消息,它可以用来确认已经协商好的密钥。
同时Finished消息包含一个verify_data域,可以用来校验之前发送和接收的信息。
Verify_data域是一个PRF函数的输出(pseudo-random function)。这个伪随机函数的输入为:(1)两个hash值:一个SHA-1,一个MD5,对之前握手过程中交换的所有消息做哈希;(2)the MasterSecret,由预备主密钥生成;(3)finished_label,如果客户端发送的则是”client finished”,服务器发送的则是”server finished”。关于这个PRF的细节在3.3节中会具体描述。 此外,Finished 消息不能够在ChangeCipherSpec前发送。
2.2 不同密钥交换算法对应的握手过程
不同的密钥交换算法对应的握手过程中的消息序列是不同的,相应的实现方式也不同,本节介绍几个常见密钥交换算法对应的握手过程。
TLS-RSA:在这个场景下,PreMasterSecret是由客户端指定的,并用RSA公钥加密发送给服务器。服务器不影响PReMasterSecret的生成。
TLS-DH:基于DH的密钥交换也被称为静态Diffie-Hellman。在这种场景下,可能是双方各自提交一个证书包含DH公开值,或者服务器端提交证书包含DH公开值,客户端在每次会话中选择一个值。协商好的DH值被用作PreMasterSecret。显然证书中的参数是固定的,那么每次链接的PreMasterSecret也是相同的。
TLS-DH不能提供前向安全性。
TLS-DHE:基于DHE的TLS握手中会有ServerKeyExchange消息。握手过程中交换参数的认证通过数字签名来实现,支持的签名算法包括RSA和DSS。DH参数会有它的数字签名一起被包含在ServerKeyExchange中被发送出去。客户端在ClientKeyExchange中返回它的公开DH参数,但没有签名保护。同样协商出来的DH密钥被用作PreMasterSecret。
2.3 密钥生成
Pseudo-random Function(PRF):伪随机函数是SSL协议中的一个重要组成部分,它被用来秘密扩展以及生成密钥。在3.1节讲解Finished消息时已经简单提及PRF,在这里我们详细讨论PRF的工作原理。SSL/TLS协议中的PRF如下图所示:
这个PRF基于两个hash函数:MD5和SHA-1,它有3个输入,一个Secret(比如PreMasterSecret),一个标志符(比如”client finished”, “server finished”),还有一个种子值(比如客户端随机数+服务器端随机数)。
Secret在使用时被分为长度相同的两半:S1和S2,分别作为P_MD5和P_SHA-1的输入。
PRF的输出按如下方式处理得到:
P_MD5和P_SHA-1都是扩展函数,用来扩展秘密值以用于密钥生成,它们的计算方式如下:
其中A(0) = seed, A(i) = HMAC hash( secret, A( i −1) )
这个秘密扩展会一直进行直到得到足够多的扩展数据。 Key Derivation:主密钥(MasterSecret)是利用上述PRF从预备主密钥(PreMasterSecret)生成的。每个MasterSecret为48字节,生成方式如下:
得到MasterSecret后,它会被进一步处理最后生成4个不同的密钥和2个初始向量(IV)。处理过程如下:
处理过程一直持续到足够多的输出被生成,然后把输出分为4个key和2个IV:
下图完整阐述了SSL/TLS协议中的密钥生成过程。
本节介绍SSL/TLS协议的版本变迁,不同版本的区别以及安全特性等。
SSL 1.0由于从来没有被公开过,并且存在严重安全漏洞,我们就不讨论了。
SSL 2.0:SSL 2.0于1995年4月被发布。SSL 2.0中主要存在的问题如下:
MAC不能覆盖填充长度域,攻击者可能利用这点破坏消息完整性;
缺乏握手认证,攻击者可以篡改密码套件列表,诱骗通信双方使用较弱的密码套件;
使用较弱的或有问题的密码算法(如MD5,RC4等),或者使用不安全的分组模式(如CBC模式);
对于不同的密码学基元使用相同的密钥,违背基本安全常识。
由于以上安全问题,RFC 6176已经明确提出避免使用SSL 2.0,但是现实生活中还有少量客户端和服务器支持SSL 2.0.
SSL 3.0:SSL 3.0引入了一些新的特性和机制解决了很多之前版本存在的漏洞。此外,SSL 3.0中引入了ChangeCipherSpec子协议。SSL 3.0向后兼容SSL 2.0,相对于SSL 2.0,它的主要改变包括以下几点:
支持更多的密码套件(支持更多的密码算法如DSS,SHA-1)
在握手阶段支持密钥协商(DH和FORTEZZA)
支持密码学参数的重协商
增加了消息压缩选项
MAC能够覆盖填充长度域了,同时MAC可以使用MD5或者SHA-1
不同的密码学基元使用不同的key
Alert子协议能对任何错误给出两种提示:Warning和Fatal
中止链接的时候会用一个close_notify警告通知通信双方
支持证书链,而非单个证书
通过Finished消息认证所有发送和接收的消息
加密了的PreMasterSecret包含当前使用的协议版本,防止协议回滚
TLS 1.0:TLS 1.0和SSL 3.0差别非常小。实际上,TLS 1.0是SSL 3.1,在IETF接手后改名为TLS。TLS 1.0版本是目前使用最广泛的SSL/TLS协议版本。
TLS 1.0不再支持使用FORTEZZA的密码套件。
TLS 1.0中MAC被替换成HMAC。
之前提到ChangeCipherSpec消息必须在Finished消息前发送,在TLS 1.0中,如果消息序列不符合这个要求,会产生FATAL警告并终止链接。
TLS 1.1:这个版本相比之前改动也很小。最重要的改动是预防了针对CBC分组模式的一些攻击。现在的填充错误变的和非法MAC错误不可区分了,防止攻击者利用可区分错误响应建立解密预言机对密文进行攻击。
在每次加密过程中,使用CBC分组模式时,都需要显示给出IV,而不用再密钥生成时使用PRF生成IV。
此外,TLS 1.1禁止为适应之前出口限制而使用弱化的密码套件。
TLS 1.2:这是最新的版本,部署的还比较少。这个版本禁用了PRF中的MD5和SHA-1,而用一个可配置的hash函数取代了它们,这样的修改简化了计算过程。修改后的PRF风格如下:
此外,TLS 1.2的一个重要变化是支持认证加密模式(支持GCM等)。但是由于一些AEAD(Authenticated Encryption with Associated Data)密码算法要求IV为隐式的,所以IV又恢复到由MasterSecret生成,即TLS 1.0以前的风格。
TLS 1.2支持使用GCM、CCM的新密码套件。
同时SSL 2.0被宣布放弃,不再向后兼容SSL 2.0.
本节简单介绍一下流行的SSL/TLS实现库,SSL协议非常复杂,由开发者自己实现常常会出错,开发者在具体实现SSL协议时通常会依赖于这些密码学库。
4.1 常见的SSL/TLS 实现
OpenSSL:这是非常流行的开源SSL/TLS实现。
OpenSSLim完全用C语言实现,支持SSL 2.0/3.0,TLS 1.0/1.1/1.2以及DTLS 1.0。
OpenSSL 近年来出现了很多的安全漏洞,比如2014年曝出的着名的Heartbleed漏洞等。
JSSE:这是使用java实现的,支持SSL 3.0,TLS 1.0/1.1/1.2.
Bouncy Castle:它不仅仅支持SSL/TLS,它是一个完整的密码学库,支持各种密码学算法和协议。不过它仅仅支持TLS 1.0版本。
Android平台主要使用这个密码学库。
GnuTLS:这是另一个用C语言实现的库,支持SSL 3.0,TLS 1.0/1.1/1.2以及DTLS 1.0。主要在Unix世界被使用。同时以各种安全漏洞多而闻名。
NSS:这是最初由网景公司(Netscape)开发的库,支持SSL 2.0/3.0,TLS 1.0/1.1,现在主要被浏览器和客户端软件使用,比如Firefox使用的就是NSS库,Chrome使用的是一个NSS库的修正版。
下表是一些常见软件以及它们所使用的SSL/TLS实现库的情况:
其它还有一些常用的SSL实现库,如cryptlib、CyaSSL、MatrixSSL、PolarSSL等,由于市场占有率不高,我们这里就不多做介绍了。
4.2 流行SSL/TLS实现库的安全研究
最近几年曝出的高风险SSL安全漏洞大多跟SSL实现库有关,比如2014年4月曝出的“心脏滴血”漏洞,存在于OpenSSL 1.0.1-1.0.1f版本中,影响全球近17%的Web服务器;同样是2014年曝出的苹果公司iOS 7.0.6版本系统中存在的“gotofail”漏洞,因为程序员的疏忽导致SSL证书校验中的签名校验失效;包括今年曝出的SSL Freak攻击也是由于SSL实现库的安全漏洞导致的攻击,我们研究小组的同学对这个攻击有详细的分析,参见《SSL Freak来袭:如何实施一个具体的SSL Freak攻击》。同时我们还开发了一个基于python的中间人代理攻击框架“风声”对某国内知名电商的服务器进行具体的攻击,并上报了漏洞。
考虑到大量SSL/TLS实现库中存在安全问题,同时这些主流的SSL/TLS实现库对开发者而言使用难度较高,比如有些SSL/TLS实现库要求开发者自己进行随机数生成或密钥管理,让缺乏系统信息安全知识培训的开发者去使用这样高度复杂的密码学库容易产生很多安全问题。我们在这里推荐一些高级密码学库:Google keycazer、NaCl、Cryptlib、GPGME。这些密码学库存在的安全问题较少,同时封装了一些底层的密码学操作,降低了开发者的使用难度。
以上就是本次要介绍的SSL /TLS协议基本知识,后续的文章我们会对一些典型SSL/TLS攻击进行具体介绍。
参考:
1、 http://netsecurity.51cto.com/art/201505/476337.htm
2、 http://www.cnblogs.com/NathanYang/p/9183300.html
3、 https://www.cnblogs.com/bhlsheji/p/4586597.html
⑵ 加密后的字符串最后有两个“==”是什么加密算法
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
1,Base64使用US-ASCII子集的64个字符,即大小写的26个英文字母,0-9,+,/。
2,编码总是基于3个字符,每个字符用8位二进制表示,因此一共24位,再分为4四组,每组6位,表示一个Base64的值。
3,Base64值为0就是A,为27的就是b。这样,每3个字符产生4位的Base64字符。如果被加密的字符串每3个一组,还剩1或2个字符,使用特殊字符"="补齐Base64的4字。
(2)javarc4加密算法扩展阅读:
应用
Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的一个标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。
在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换。
因为ANSI SQL中已将“%”号用作通配符。
为解决此问题,可采用一种用于URL的改进Base64编码,它不仅在末尾去掉填充的'='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”。
这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。
另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“/”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。
此外还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。
⑶ 文件受版权保护或被加密 无法转换WMV格式
曾经有个破解的软件freeme.
1.下载这个东东 http://jya.com/FreeMe.zip
2.解压后会发现一个FreeMe.exe的执行文件,将它拷贝到你的音乐文件夹下,比如D:MP3
3.把你的加密wma音乐也放在D:MP3下
4.进入MS-DOS命令行模式
5.在命令行里打D:MP3>freeme xxx.wma
然后会生成一个Freed-xxx.wma,这就是破解后的文件
但是请注意,这个freeme.exe只能破解DRM2格式的文件,wma既有DRM1的,也有DRM2的,所有肯定会有些文件不能破。(此外,微软已经发布了针对freeme.exe 的补丁,他包括更多安全性使得将来针对发布媒体的攻击变得更加困难)
还有一些WMA文件需要联网取得许可证,比如9sky。这类WMA如何破解呢?
1.当你从某某某网站下载一个wma文件后,直接用FreeMe破解是不行的。
2.你必须先用windows media player。播放这个wma文件,wmp会自动连接某某某网站取得播放许可证(有时还需要你输入认证信息)。
3.按步骤取得许可证后,按弹出的对话框上的那个Play就可以听音乐了。但,别急,先Stop media player(不能用pause,否则会有access violation),然后进入MS-DOS,再用FreeMe就可以顺利破解了。
以下是闲话解说,有兴趣的看看
最近下载了杀破狼前传CD1.WMV,杀破狼前传CD2.WMV,居然不能播放,真是抑闷哪!
用暴风看不了,要用系统自带的Media player一打开就提示解码器要升级,升级完成后又提示要证书才能播放,还好这网站估计只是为了宣传,虽然会弹出几个网页,但不点也没有关系,直接关掉就行了。接着就自动下载了证书,等个1分钟,再次打开文件,就可以播放了。
下面的内容是的转载的,希望对大家有帮助:
想破解WMV许可证的进来!
如果你有电信影视网帐号,则可用;
如果没有,你可以使用 最新的 winamp505_pro 观看,它可以屏蔽这个通行证
winamp505_pro 播放器下载地址:
点击下载:http://www.ntol.cn/program/ha_winamp505_Pro.exe
用Winamp 5.07 Pro 简体中文增强版免费归观看网上限制级DVD电影的方法
第一步:下载并安装Winamp 5.07 Pro 简体中文增强版
免费的不须注册
如果你已经有Winamp 5.07 Pro 简体中文增强版,
第二步:打开Winamp 5.07Pro 简体中文增强版的“菜单选项”,选择“选项”--“参数设置”
第三步:在“参数设置”里点击“常规参数”,并将“因特网连接设置”选项当中的“选择你的 因特网连接类型”选项,设置成“允许连接到
因特网(LAN,DSL,Cable) ”选中.
第四步:
1、在“常规参数”---“媒体库”选项当中选择“因特网广播/电视”,将“因特网广播/电视选项”中的“在媒体库显示“因特网广播”和“
因特网电视”查看”前的空格里打勾。
2、将“指定等级”下面的所有空格打勾,
注意:此步骤非常重要,否则你就不会看到你希望看到的限制级的网络电视。
第五步:打开Winamp 5.07 Pro 简体中文增强版的“菜单选项”,选择“文件”---“因特网电视”选项。
第六步:在出现的“Winamp LIBRARY”(或ML)菜单选项中,点击“因特网电视”,此时,Winamp会自动搜索因特网上的所有电视资源,包括限
制级DVD 电影。并在右面的栏目里显示出可看资源目录。
第七步:也是最后一步,在所有可看资源目录里找你喜欢看的电影目录,然后双击该文件名称就可以观看了。
最后说明,该网上电影资源丰富,播放质量很清晰,画面流畅,当然,如果你是用小猫上网的话急坏了东西,你可别找我.
另外,该网上电影更新比较快,这样你就可以看到大量免费的限制级DVD电影了。
wmv文件的许可证破解工具
========
使用方法:
首先请先开始正常聆听有保护的的WMA文件
入工具选项里面的证书管理
进行证书导出
导出后的证书文件建议放于一特定目录
将其freeme压缩包解压到证书文件所在文件夹 这时再把需要解除保护的文件放于同一文件夹
DOS命令行窗口输入 freeme 文件.wma
于是得到 freed-文件.wma 此文件即为没有任何保护的普通WMA文件 可以任意播放
【注意】解除保护需要一可用证书 如果freeme运行无效 请导出你拥有的最新证书文件,像9天的可以获取到证书再进行破解。
点击下载:http://netroom.hbu.e.cn/personal/crackmore/crsoft/cr-wma.zip
另一个软件(看了就会用)
点击下载:http://netroom.hbu.e.cn/personal/crackmore/crsoft/cr-wma2.zip
如果还不行,请看下面:
**最近看到的方法,安装media player 7 或更低版本即可观看,大家可以试试看。
事实上"每个系统"中都有隐藏的6.4版本存在。为什么?因为微软自己也知道,MediaPlayer的6.4版本是最最稳定的,其他的诸如7.0、8.0版本
,播放MPEG4的剪辑时都会出现这样或者那样的问题。
========
密码分析家2.7(感谢7楼 shirley510提供破解版地址)
软件语言: 简体中文
软件类型: 黑客工具 / 破解专区
运行环境: WinXP, Win2000, NT, Win9X
软件大小: 1.29 MB
软件简介: 密码分析家可以分析出带版权的WMV和WMA文件的用户名和密码。软件的特殊之处是在分析的过程中可以自动生成一个或多个仿真
的许可证借此来探测WMV和WMA文件的用户名和密码,准确率可达80%。
此外软件还可以分析出带有密码保护的WDL和PDF文件的密码。
下载地址:http://www.yzqn.net/SoftDown.asp?ID=13952
一般提供影片的网站把WMV加密,即使你下载了也没法看
除非你你花钱获取许可证,也就是在网站上注册,打开WMV的时候会一般会连接到这个网站或代理站
让你输入个类似账户密码之类的东西,然后网站会自动把许可证分配给你
你就可以看了,
破解DRM,别想了,很麻烦……
DRM,英文全称Digital Rights Management ,一般翻译为数字版权保护或数字版权管理。DRM分为两类一类是多媒体保护,例如加密电影、音
乐、音视频、流媒体文件。另外一类是加密文档,例如Word, Excel, PDF等。DRM主要通过技术手段来保护文档、电影、音乐不被盗版。这项技
术通过对数字内容进行加密和附加使用规则对数字内容进行保护,其中,使用规则可以断定用户是否符合播放。
系统原理:
系统会将密钥标识和许可证颁发机构地址写入打包加密后的内容的头部,并且使用另一对密钥,通过椭圆曲线加密算法对头部信息进行签名,
防止头部信息被非法修改。内容部分的加密过程可以简单描述为,首先使用SHA-1散列算法处理56位密钥,得到一个160位,即20字节的密钥散
列。这个密钥散列的前12字节将用作生成加密过程中使用的密钥。这12个字节将作为一个密钥,通过RC4算法加密一个全零的64字节串,得到一
个64字节的加密结果,其中前48字节,即12个32位字作为产生加密内容使用的密钥的来源,分别针对前面6个32位字的和后面6个32位字进行操
作。对于被加密的内容来说,首先把被加密的内容切分为8个字节的数据块。对于每一个8个字节的数据块,它的前32位数据将和上述密钥的前
面6个32位字的进行运算,后32位数据将和上述密钥的后面6个字节进行运算。具体运算过程是,32位数据与6个32位字的的密钥的第一节字节相
乘,然后除以4294967296取其余数,并交换结果的高16位和低16位,然后再与6个32位字的的密钥的第二节字节相乘,然后除以4294967296取其
余数,并交换结果的高16位和低16位,然后再与6个32位字的的密钥的第三节字节相乘,然后除以4294967296取其余数,并交换结果的高16位和
低16位,然后再与6个字节的密钥的第四节字节相乘,然后除以4294967296取其余数,并交换结果的高16位和低16位,然后再与6个32位字的的
密钥的第一节字节相乘,然后除以4294967296取其余数,并交换结果的高16位和低16位,然后再加上6个32位字的密钥,然后除以4294967296取
其余数,上述过程定义为函数f(x),设一个64位状态值,并设初值为零。
网上找了N久后终于找到FairUse4WM,经测试使用ok,特和兄弟们分享
使用心得:该软件是属于必须得有认可证的情况下才能使用,按我们bt下载的基本上认可证都能下载下来,就是麻烦每次必须得用MEDIA
PLAYER打开并且还得等待,中间还有弹出的网页,麻烦啊,所以用这个软件把drm也就是认证步骤分解出来,分解出来后就可以像正常的WMV文
件一样用其他软件播放,感觉不错的,软件运行之前得保证你的认可证,也就是先播放wmv文件,下载认可证弹出窗口播放按钮可以点击时不要
播放直接退出,之后运行fairuse4wm,按下一步来就是了,再把你的wmv文件重新输出成个新文件通常是[NoDRM]-文件名.wmv
软件名称:FairUse4WM
软件版本:V1.3
适用平台:Windows 9x/ME/NT/2000/2003/XP
官方网站:http://forum.doom9.org/
功能简介:
-----------------------------------------------------
FairUse4WM 是一个 drmdbg 的图形用户界面程序,可以移除媒体文件中的 DRM 保护,支持 WM10 和某些 WM11 版本,不支持 WM9。如果
您发现某些文件不能在您的移动设备上播放或无法被转换,请尝试使用这个软件来提取许可证。一旦您提取了许可证,就再也不需要使用WMP来
播放每个文件了。(请勿用于非法用途)
‘汉化说明’
-----------------------------------------------------
安装文件到任一目录运行即可!
-----------------------------------------------------
下载地址:http://teacher.zjnu.cn/wuguole/HA_FairUse4WM13_WGL.exe
下载地址:http://www.cngr.cn/dir/212/300/2006090812906.html
下载地址:http://wuguole.ote.com/down/HA_FairUse4WM13_WGL.exe第三个下载地址 (用工具例如迅雷下载)
找到更有意思的东东了,解决不了问题的朋友请继续耐心看下去。
wmv文件的许可证破解
使用方法:
首先请先开始正常聆听有保护的的WMA文件
入工具选项里面的证书管理
进行证书导出
导出后的证书文件建议放于一特定目录
将其freeme压缩包解压到证书文件所在文件夹 这时再把需要解除保护的文件放于同一文件夹
DOS命令行窗口输入 freeme 文件.wma
于是得到 freed-文件.wma 此文件即为没有任何保护的普通WMA文件 可以任意播放.
【注意】解除保护需要一可用证书 如果freeme运行无效 请导出你拥有的最新证书文件,像9天的可以获取到证书再进行破解。
点击下载FreeMe:http://netroom.hbu.e.cn/personal/crackmore/crsoft/cr-wma.zip
另一个软件(看了就会用)
点击下载Un***:http://netroom.hbu.e.cn/personal/crackmore/crsoft/cr-wma2.zip
现在网上流行的视频格式除了RMVB和AVI之外,有慢慢出现了一些WMV格式的视频,这些视频文件无法用第三方播放器播放,播放时必须在线,无法脱机播放。如果你也遇到这样的视频文件,也正因此而苦恼时,我们来帮你解决问题吧!
前段时间我从网上下载了一部电影,打开后发现是WMV格式的,它必须要用Windows Media Player在线播放,非常麻烦!经过研究,这些视频都是加了DRM数字签名,需要联网验证,获取许可证后才可以播放的。
\\小知识
揭秘DRM
DRM(Digital Right Management),内容数字版权加密保护技术,这是专门来用保护音、视频文件内容版权的技术,它可以限制文件播放的次数,播放的时间等。这种技术目前用在微软的视频格式WMV上,现在网络发布的正版电影多是采用这种格式进行加密,比如前段时间网络发布的《夜宴》,就使用了DRM版权保护技术。
DRM的工作原理:首先建立数字视频授权服务器,编码压缩后的视频文件,利用密钥(Key)可以被加密保护(Lock),加密的数字节目头部存放着KeyID和视频授权服务器的URL。用户在播放视频时,根据视频文件头部的KeyID和URL信息,连接至视频授权服务器,验证授权后,服务获取发送出相关的密钥解密(Unlock),也就是许可文件,节目就可播放了。
正是由于许可证的问题,这类视频文件不能脱机播放,不能用第三方播放器播放,不能在其他电脑上播放,更别说转换成其他格式在MP4上播放了。为了解决这几个不便,目前唯一的方法就是将DRM从WMV文件中剥离出来。
FairUse4WM小档案
软件版本:1.3 汉化版 软件大小:1202KB
软件性质:免费软件 适用平台:Windows 9x/2000/XP
下载地址:http://www.newhua.com/soft/51937.htm
第一步:你要确认已经取得WMV文件的合法授权,即可以用Windows Media Player正常播放,FairUse4WM的功能只是将DRM验证部分剥离。
第二步:运行FairUse4WM后,会出现下图所示窗口,提示你FairUse4WM至少需要一个已激活的许可文件,点击“恢复许可证”按钮,如未提示“IBX组件似乎不存在”,则可直接跳过第三步。
小提示
由于网上大部分DRM视频是使用DRM 10组件加密的,所以建议你升级至Windows Media Player 10,以使可以获取许可证。
第三步:现在我们需要获取一个已激活的许可文件,登录http://services.wmdrm.windowsmedia.com/indivSite/en/indivit.asp,点击“Upgrade”按钮,稍候会弹出获取许可证的窗口,点击“是”就可以了。重新启动电脑,完成安装。
第四步:有了正确的许可证,点击“恢复许可证”按钮后,就会打开下图所示窗口,点击“添加文件”按钮,选择带DRM的WMV文件,再设置好“输出目录”,点击“下一步”。
这时,软件开始转换视频,800MB的文件不到2分钟就可以完成转换了。现在用暴风影音或Kmplayer播放一下转换后文件名前带有[NoDRM]的视频文件,看看DRM是不是已经被剥离?
小编有话说:对于网上下载回来的带DRM的WMV视频,如果你不能判断其获取许可证的网站是否合法,最好不要轻易去联机下载。
\\单独排
DRM出了故障怎么办?
如果出现了“Windows Media数字权限管理(DRM)”系统可能无法正常工作”类的提示,可以按如下步骤进行修复。
第一步:确认系统安装了Windows Media Player 10。
第二步:从http://work.newhua.com/cfan/200707/cleardrm.rar下载DRM清除工具,运行后系统中的DRM文件及注册表中的DRM信息会全部清除。
第三步:登录http://drmlicense.one.microsoft.com/Indivsite/zh-cn/indivit.asp?force=1,点击“Upgrade”按钮,重新更新DRM信息就可以了。
小提示
DRM是和电脑硬件相关的,如果你更换了硬件,可能会出现“The license to play the packaged media is invalid.C00D277F - Secure storage protection error.Restore your licenses from a previous backup and try again.”的提示,用上面的方法也可以修复。
DRM的备份与恢复
除了上面我们提供的方法外,如果你需要重装系统又无法下载到新的许可证了,可以将DRM备份出来:进入Windows Media Player,选择“工具→管理许可证”菜单项,点击“更改”按钮,将位置设置在闪存盘等位置,然后点击“立即备份”,这样重装系统后,只要在同一窗口中选择好备份的位置,再点击“立即还原”按钮就可以了。
如果还不行,请看下面:
**最近看到的方法,安装media player 7 或更低版本即可观看,大家可以试试看。
事实上"每个系统"中都有隐藏的6.4版本存在。为什么?因为微软自己也知道,MediaPlayer的6.4版本是最最稳定的,其他的诸如7.0、8.0版本,播放MPEG4的剪辑时都会出现这样或者那样的问题。
Media Player 6.4的位置一般如下:
C:\Program Files\Windows Media Player\mplayer2.exe
下载实时播放的流节目完全教材(高、中、初级指南)
一、初级篇——下载隐藏的ASF与MWV文件
ASFRecorder V1.1是一个专门用来下载ASF、Wma、Wmv格式流文件的工具。它除了能把ASF下载回来外,也支持ASF文件的索引格式ASX文件,它能把隐藏在ASX里面的真正流部分找出来,甚至还可以设置代理等等,功能强大之余使用也非常方便。只要在其菜单下面选再输入流节目的地址后就可以回到主界面按那个三角形符号开始下载了。
最近还出现了另外一个流节目下载软件 Stream Download Project v1.4 ,它的功能和 ASFRecorder非常的相似,一样是只支持ASF和WMV格式,一样不支持多线程下载和续传。但它毕竟是比较新的软件,在一些 Streambox Vcr都不能成功下载的情况下,用这个软件试试或者会让你有柳暗花明的感觉。
二、中级篇——下载隐藏的RM文件 Streambox Vcr不但支持点播形式的流节目也同样支持现场流节目,而且两者可以同时下载!由于它采用了独特的分析技术,所以可以把那些隐藏在ASX后的ASF文件和隐藏在SMIL文件后的RM文件找出来并进行下载。这个功能虽然在ASFRecorder里面已经实现,但真正做到实用阶段的是Streambox Vcr!另外,Streambox Vcr支持的流播放协议相当齐全,http、ftp、rtsp、mms、pnm等能数得出的协议它都全部支持并可以在下载的时候自动判别。除此之外它支持断线续传、支持定时下载、支持拖放下载等等作为下载软件必要的功能它一样没少,够吸引的吧!
三、高级篇——下载受保护的流媒体文件
对于一些隐藏得更深、保护得更完善的流文件,StreamBox vcr因找不到真实地址而无法下载。这个时候,我们就需要用另外的软件来分析、整理出真实的地址了。既然流文件用播放器能播放,那么真实地址一定是隐藏在发送到本机的网络数据包里面。所以只要用软件截获网上发送过来的数据包,然后加以分析就一定可以找得到真实地址。现在出现了一个专门是用来和StreamBox vcr等软件配合的地址嗅探软件Project URL Snooper
下载电影的技巧(极限下载秘技)!!!
从网上下载,听起来容易,但想真正成为高手,就要做到“下别人之不能下,载别人所不会载”,其中的门道可并不简单。
提到下载,很多人都认为所谓的download不过是从网上把软件或mp3复制到硬盘中的一个过程。然而,如果真用这个标准来衡量的话,恐怕把全世界网民至少能数出几亿个下载高手来。可实际上,下载包含的内容远不止于此。从理论上讲,即使是浏览普通的网页也应该算是下载的一种,何况去下载软件、音乐、图书等更精彩的资源了。网络的开放性不断吸引着人们去寻找对自身有价值的东西,而各种商业网站又为了自身的利益,不断依*“先进”技术使它们提供的资源逐渐封闭化。为了下载一个软件而打开三层页面的网站并不少见,而更多的图库站点更需要您不断点击大大小小的链接才肯露出庐山真面目;说是免费阅读图书,又不让您下载,给您一个连抓图都不支持的java窗口,慢慢看去吧!(估计等您把书看完,您的网费开销能买十本原版书了。)有人说,网上的免费是糖衣炮弹:想下载软件,请您看广告;想聊天,请您看广告;想要免费信箱,请您看广告(更有附加在您每封邮件末尾的广告)。还有,某些精彩的flash动画、real影片以及各种在线播放的音频和视频,更是“只可远观而不可亵玩焉”——不支持下载!
软件名称:FairUse4WM,一个很好的工具,可以批量去除下载的WMV、WMA视频文件中的许可证,即DRM 数字版权保护,让你随意播放或转换视频文件而不受其限制,分享一下!
下载地址(汉化版):ftp://hhdown:[email protected]/download/HA_FairUse4WM13_WGL.exe
说明:用Windows Media Player,依次浏览播放待去除许可证的WMV或WMA视频文件,即获得所有视频文件的许可证后,运行软件,添加这些文件即可批量去除许可证。操作和功能远胜于软件FreeMe.exe。
⑷ java如何读取一个加密后的.xls文件
近日来,研究了一下Excel Biff8(xls 97-2007)与OpenXML(ECMA-376)的加密文档的读取(这还是为了我们世界先进Grid而做的 ^__^)。有些成果,写在这里,希望能给要做类似功能的XD们一些参考。
如有不详,请联系:[email protected] / [email protected]
前提:
1. 加密文档:指Wookbook级的加密,就是在Save Excel文档时在General Settings中设置open password之后的文档;
2. 打开:需要用户传入密码。并非破解。但请勿将本文方法添加暴力模块使用 :-) ;
3. 本文涉及较多为,密钥计算,关于解密细节请参考微软相关文档;
使用的加密算法: RC4, SHA1, MD5, AES-128(其中RC4并不包含在所有版本的.NET Framework中,AES算法可以在.NET Framework 3.5中找到)
本文示例依赖 .NET Framework 3.5
A. Biff8 的加密文档读取
1. 通过文档中FILEPASS的record取得,文档的加密信息(关于Biff文档的格式问题,请参阅Biff的微软文档)
其中Biff8可以使用两种方法加密:Biff8标准加密算法和Biff8扩充加密算法。本文主要讨论最常用的Biff标准加密算法
2. 通过FILEPASS的结构,获得如下信息:
salt(加密随机数,16 bytes)
password verifier (密码效验器,16 bytes)
password verifier hash(密码效验器Hash,16 bytes)
3. 通过以上信息,生成解密key。并通过密码效验器,验证密码:
i. 将密码转化成unicode数组,并进行MD5 Hash;
ii. 将hash结果与salt串联,然后将byte数组,反复串联16次(336 bytes) ,然后再进行MD5 Hash;
iii. 将上步hash结果的前五位,串联上4 bytes的block值(在密码验证阶段为0,在以后解密阶段为block的index) ,然后进行MD5 Hash;
iv. 将上步hash结果的前16位,作为key
v. 使用RC4对称加密算法,将password verifier和password verifier hash分别解密,然后对password verifier的解密结果进行MD5 hash,其值应和password verifier hash的解密结果一致,即为密码正确。
vi. 之后进行逐个record的解密。excel biff8加密原则基本为,record的标示不加密,长度不加密,个别record不加密(见文档);另外,在record解密时,还需要通过block的值重新计算解密key,block的大小为1024.
4. 详细请参照示例代码;
B. OpenXML(ECMA-376) 加密文档的读取
1. 通常来说,xlsx文件相当于一个zip文件,可以用zip程序,直接打开。而在加密后,为了安全性考虑,微软使用了 structured storage(一种OLE文档存储方式)存储(可以用7-zip或者OLE document viewer打开,windows也有相应API来操作此类结构)。在上述文档中,有一个叫做“EncryptedPackage”加密的package,就是一个zip包通过AES算法进行加密之后的结果。我们将使用和A一样的方式来检查密码,但生成key的方法不同;OpenXML的加密类型也有多种,我们这里就讨论常用的用AES-128进行加密的流程;
2. 通过文档的“EncryptedInfo”部分,需要过的一下信息(关于此部分的结构,请参考[MS-OFFCRYPTO].pdf)
salt(加密随机数,16 bytes)
password verifier (密码效验器,16 bytes)
password verifier hash(密码效验器Hash,32 bytes)
3. 通过以上信息,生成解密key。并通过密码效验器,验证密码:
i. 首先,定义一个H函数,其有两个输入,内部使用SHA1算法将两个输入串联之后的结果hash返回;
ii. 先将salt与password(password的unicode数组)进行H计算,h = H(salt, password) ;
iii.然后设iterator为0x00000000,将其转为4byte的数组,然后进行H计算,h1 = H(iterator, h);
iv.将上面的iterator递增一,然后再与h1进行H计算,h2 = H(iterator,h1),然后将这个递增和计算过程重复50000次,最后计算过的iterator为49999即可;
v. 现在有计算结果h50000,将h50000再与0x00000000(4 byte数组)进行H计算,Hfinal = H(h50000, 0x00000000);
vi. 生成一个64byte的数组,将每位都初始化成0x36,然后将这个数组与Hfinal异或;(关于这个地方,微软文档中写的有错误,按照原文的方法生成的key不正确,要不是文档的作者回信告诉我要使用这个法子,就算我想破头也想不出来啊 T__T)
vii.将异或结果,进行SHA1 hash,结果的前16byte就是解密的key;
viii.初始化AES算法,key长度为128,模式为ECB模式,Padding为none; 然后将password verifier 和password verifier hash分别解密;
ix. password verifier 解密后的SHA1 hash结果应该与password verifier hash解密后的前20byte相同;
4. 关于"EncryptedPackage" 的解密则更为简单,只许将“EncryptedPackage”读入,去除前8byte的size信息后,进行AES解密,即为未加密的标准openxml文档。
参考:
[MS-OFFCRYPTO].pdf
[MS-XLS].pdf
ECMA-376 standards
Reply by "winnow", 2008-09-10, 1:17
-----------------------------------------------------
总结一下, 关于这两种基于密码的加密方法, 基本上都是基于RFC2898 建议, 思想是这样:
输入是用户的密码:password, 输出是提供给加密函数的密钥:key.
考虑安全, 需要使同样的password生成的key不一样, 这样用相同的password加密后的结果就无法比较. 需要一个随机数salt.
另外, 为了使暴力破解的代价增大, 考虑使用一个循环多次的过程, 需要循环次数:iteration_count.
概念上, 生成方法为: 将password和salt进行某种运算, 配合一个Hash函数, 以某种方式循环iteration_count次, 在最后的结果里取一部分作为key输出.
具体参照RFC2898中的建议方法PBKDF1和PBKDF2.
这样, 用户输入的密码与一个随机数组合, 经过一定代价的运算, 就生成了可以供加密函数使用的密钥. 使用这个密钥和一个加密函数, 就可以进行加密了.
在应用中, 为了快速判断密码是否错误. 生成一个随机数verifier, 用一个Hash函数计算verifier的hash值:verifier_hash, 分别加密verifier和verifier_hash并保存.
解密的时候, 先分别解密出verifier和verifier_hash, 计算verifier的hash值, 与verifier_hash比较, 如果一致, 即说明密码正确.
⑸ 求一个实现RC4加密算法的第三方包,JAVA的
曾经实验室的带动,加上最近在上网络安全与管理的专业选修课,对加密算法有了浓厚的兴趣。老师留了一次作业,用自己的学号为密钥,加密一句话,使用RC4加密算法。
图书馆查找资料,发现RC4算法还是比较容易理解的。于是动手实现出来。不多说废话,还是贴代码吧。我写的注释还算清楚。
先贴一个含main函数的核心算法类,有测试,可以看看最后输出了什么^.^
import java.io.UnsupportedEncodingException;
public class Arithmetic {
public static void swap(int x,int y){
int temp;
temp=x;
x=y;
y=temp;
}
public static void main(String[] args) throws UnsupportedEncodingException {
// 密钥(我的学号)
byte K[]={0,6,1,6,1,0,0,4};
int S[]=new int[256];//状态矢量S
int T[]=new int[256];//临时矢量T
// 初始化状态矢量S,同时生成临时矢量T
for(int i=0;i<256;i++){
S[i]= i;
T[i]=K[i%K.length];
}
//用T使S置换
{
int j=0;
for(int i=0;i<256;i++){
j=(j+(int)S[i]+(int)T[i])%256;
swap(S[i],S[j]);
}
}
int i = 0,j=0;
boolean tt=true;
int c=0;
int t;
byte k;//密钥流的当前字节
byte C[]="套范续".getBytes();
System.out.println(C[3]);
byte P[]=new byte[C.length];
while(c<6){
i=(i+1)%256;
j=(j+S[i])%256;
swap(S[i],S[j]);
t=((S[i]+S[j])%256);
k=(byte) S[t];
// C[c]=(byte) (k^P[c]);
// System.out.print(C[c]+" ");
P[c]=(byte) (k^C[c]);
System.out.print(P[c]+" ");
c++;
}
System.out.println(new String(P,"GBK"));
// byte rr[]={65};
// System.out.println(new String(rr));
}
}
再来贴一下以界面展示的代码,比较长。用的就是普通的jsp+servlet。
核心类:
public class RC4 {
// 密钥(我的学号)
byte K[]={0,6,1,6,1,0,0,4};
void swap(int x,int y){
int temp;
temp=x;
x=y;
y=temp;
}
public String encrypt(String plaintext){
String ciphertext=new String();
int S[]=new int[256];//状态矢量S
int T[]=new int[256];//临时矢量T
// 初始化状态矢量S,同时生成临时矢量T
for(int i=0;i<256;i++){
S[i]= i;
T[i]=K[i%K.length];
}
//用T使S置换
{
int j=0;
for(int i=0;i<256;i++){
j=(j+(int)S[i]+(int)T[i])%256;
swap(S[i],S[j]);
}
}
int i = 0,j=0;
int c=0;
int t;
byte k;//密钥流的当前字节
byte P[]=plaintext.getBytes();
byte C[]=new byte[P.length];
while(c<P.length){
i=(i+1)%256;
j=(j+S[i])%256;
swap(S[i],S[j]);
t=((S[i]+S[j])%256);
k=(byte) S[t];
C[c]=(byte) (k^P[c]);
System.out.print(C[c]+" ");
c++;
}
System.out.println(new String(C));
ciphertext=new String(C);
return ciphertext;
}
}
页面:
home.jsp
<%@ page language="java" import="java.util.*,core.ChangeCharset" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'home.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" type="text/css" href="styles.css">
<script type="text/javascript">
function doencrypt(){
document.form1.domethod.value="encrypt";
document.form1.submit();
}
function dodecipher(){
document.form1.domethod.value="decipher";
document.form1.submit();
}
</script>
</head>
<body>
<%@ include file="header.jsp" %>
<div id="show" >
<form name="form1" method="post" action="Manage">
<input type="hidden" name="domethod" />
请输入一句话:<input type="text" name="plainText" />
<a href="javascript:void(0)" onclick="javascript:doencrypt();return false;">加密</a>
</br>
</br>
<%String cipher=(String)request.getAttribute("cipher");
if(cipher==null){
cipher="";
}
String plain1=(String)request.getAttribute("plain1");
if(plain1==null){
plain1="";
}
%>
所得密文:<input type="text" name="cipherText" value="<%=cipher %>" />
<a href="javascript:void(0)" onclick="javascript:dodecipher();return false;">解密</a>
</br>
</br>
所得明文:<input type="text" name="getPlain" value="<%=plain1 %>" />
</form>
</div>
<%@ include file="footer.jsp" %>
</body>
</html>
header.jsp(这个没什么意思,但还是给出来吧,给初学html的朋友一些借鉴)
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<div id="header" align="center">
<h1>RC4加密算法测试系统</h1>
<hr>
</div>
footer.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<div align="center">
<hr>
<table>
<tr><td>Powered by Tasu</td></tr>
<tr><td>Copyright@Tasusparty Studio 2009-2010 All rights reserved</td></tr>
</table>
</div>
styles.css(给出来省事一些,诸位看起来方便)
body{
margin:0px;
padding:0px;
background: #E6EAE9;
font-family: "Lucida Sans Unicode", "宋体", "新宋体", Arial, Verdana, serif;
color:#4f6b72;
font-size:12px;
line-height:150%;
}
#show{
margin:0px auto;
padding:0px;
width:200px;
height:400px
}
#header{
margin:30px auto;
}
处理的Servlet:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import core.ChangeCharset;
import core.RC4;
public class Manage extends HttpServlet {
public Manage() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("GBK"); //设置输入编码格式
response.setContentType("text/html;charset=GBK"); //设置输出编码格式
String domethod=request.getParameter("domethod");
if(domethod.equals("encrypt")){
String plain=request.getParameter("plainText");
RC4 rc4=new RC4();
String cipher=rc4.encrypt(plain);
System.out.println(cipher);
request.setAttribute("cipher", cipher);
request.getRequestDispatcher("home.jsp").forward(request, response);
}
if(domethod.equals("decipher")){
String cipher=request.getParameter("cipherText");
RC4 rc4=new RC4();
String plain=rc4.encrypt(cipher);
request.setAttribute("plain1", plain);
request.getRequestDispatcher("home.jsp").forward(request, response);
}
}
public void init() throws ServletException {
// Put your code here
}
}(中网互赢 手机客户端)