重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
*_*?我是谁
创新互联公司2013年开创至今,是专业互联网技术服务公司,拥有项目网站制作、成都网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元莫力达做网站,已为上家服务,为莫力达各地企业和个人服务,联系电话:18982081108
原创
关注
0点赞·757人阅读
%@ page contentType="text/html;charset=GBK"%
%@ page language="锋拿java" import="java.util.regex.*,
com.excellence点抗 mon.OAConstant,
com.excellence点抗 mon.UserInfo,
java.util.*,
java.text.SimpleDateFormat," %
html
head
titleXX系统/title
meta http-equiv="Content-Type" content="text/html; charset=gb2312"
link rel="stylesheet" href="/common/styles/default/default.css" type="text/css"
/head
script language="javascript"
/script
script language="JavaScript" src="/oa/javascripts/crypto-js.js"/script
body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0"
center
/center
/body
script type="text/vbscript"
Function str2asc(strstr)
str2asc = hex(asc(strstr))
End Function
Function asc2str(ascasc)
asc2str = chr(ascasc)
End Function
/script
script
%
UserInfo userInfo = (UserInfo) request.getSession().getAttribute("userInfo ");
String account="";
//获取用户账号
if(userInfo.getAccount()!=null!"".equals(userInfo.getAccount()))
account=userInfo.getAccount();
//有效期:格式:yyyy-MM-dd HH:mm:ss 有效期不能设置超过10分钟
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
Date date = new Date(now .getTime() + 600000);
String time = df.format(date);
%
//sessionid = base64(DES(用户账号有效期))
//DES key:67HT4WrP
var sessionId = "%=account%" + "" + "%=time%";
var mykey = "67HT4WrP";
// DES加密模式:CBC模式/ECB模式
// CBC模银返搭式加密
function encryptCBC(text, textKey) {
// 密钥转成16进制的字符串
var key = CryptoJS.enc.Utf8.parse(textKey);
// 加密过程
var encrypted = CryptoJS.DES.encrypt(text, key, {
// iv偏移量为key值
iv: key,
// 模式为CBC
mode: CryptoJS.mode.CBC,
// DES加密padding为Pkcs7
padding: CryptoJS.pad.Pkcs7
});
// 加密返回为字符串密文(加密经过一次base64加密,结果可看结果)
return encrypted.toString();
}
//对字世念符串中的特殊字符进行UrlEncode转码
function UrlEncode(str){
var ret="";
var strSpecial="!\"#$%'()*+,/:;=?[]^`{|}~%";
var tt= "";
for(var i=0;istr.length;i++){
var chr = str.charAt(i);
var c=str2asc(chr);
tt += chr+":"+c+"n";
if(parseInt("0x"+c) 0x7f){
ret+="%"+c.slice(0,2)+"%"+c.slice(-2);
}else{
if(chr==" ")
ret+="+";
else if(strSpecial.indexOf(chr)!=-1)
ret+="%"+c.toString(16);
else
ret+=chr;
}
}
return ret;
}
//对sessionid进行加密
var desPass=encryptCBC(sessionId,mykey);
//对加密的sessionid中的特殊字符转码
var desPassEncode=UrlEncode(desPass);
//URL格式:;appid=5t7i9e260w6f41b71rt7fd07h9qo9800redirectUrl=~/Portals/Views/Test/index.html
var url=""+desPassEncode+"appid=5t7i9e260w6f41b71rt7fd07h9qo9800redirectUrl=~/Portals/Views/Test/index.html";
window.close();
window.open(url);
/script
/html
登录后复制

注意事项:
1、crypto-js.js使用到了这个js,要记得引入,很多地方可以下载的,除了这里面能用到des加密,也可以从网上找其他的des加密脚本,但是因为des加密模式的问题,要注意调用函数时参数的使用,确定自己要使用的是哪种des加密方法。
2、因为这里实现的是自动登录,涉及到了url的处理,由于使用了加密,密文中会含有特殊字符,直接通过url转跳,要把url中含有的特殊字符进行UrlEncode转码。
3、注意这里des的加密方式,这样进行转跳,跳进去的网站是点虐 实现的,因为des的加密模式有几种,java,点虐 等默认的des加密模式有可能不一致,就会导致加密后的密文不一样,所以要确定自己使用哪种模式,或者直接输出加密密文来进行比较。
4、使用js比较方便的地方是因为我这里用的jsp页面,所以对处理的数据可以任意写,而且不会影响后台的使用,我觉得这是js的好处,特别是进行像这种进行类似单点登录,自己系统用的java实现,而别人用的点虐 ,直接用脚本,可以节省时间,不会对自己系统造成什么影响。
5、有一个地方要注意,这里对url进行转码时,使用到了VB脚本的一些函数,这种脚本已经很少有人会用了,而且有些浏览器已经不支持了,百度显示ie11不支持,但是我自己的电脑就是ie11,可以使用,所以这个也不是绝对的,有可能和使用到的函数有关。
6、除了des加密,还有md5,单独的base64加密,这些常用的加密方式,都可以直接用js脚本实现。
7、这里只有des的一种加密模式,还有其他的,crypto-js.js中都有,可以百度下其他加密方法的使用!
下面是完整的类,可以设置任意密码
'DES及md5加密解密----添加引用中添加对system.web的引用。
Imports System.Security.Cryptography
Imports System
Imports System.Text
Imports System.Web
''' summary
''' DES加密类
''' /summary
''' remarks/remarks
Public Class DESEncrypt
Public Sub DESEncrypt()
End 闷带Sub
Public Shared Function Encrypt(ByVal Text As String) As String
Return Encrypt(Text, "12345678")
End Function
Public Shared Function Encrypt(ByVal Text As String, ByVal sKey As String) As String
Dim des As New DESCryptoServiceProvider()
Dim inputByteArray As Byte()
inputByteArray = Encoding.Default.GetBytes(Text)
des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8))
des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8))
Dim ms As New System.IO.MemoryStream()
Dim cs As New CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Dim ret As New StringBuilder()
Dim b As Byte
For Each b In ms.ToArray()
ret.AppendFormat("{0:X2}", b)
斗罩搜 Next
Return ret.ToString()
End Function
Public Shared Function Decrypt(ByVal Text As String) As String
Return Decrypt(Text, "12345678")
End Function
Public Shared Function Decrypt(ByVal Text As String, ByVal sKey As 空历String) As String
Dim des As New DESCryptoServiceProvider()
Dim len As Integer
len = Text.Length / 2
Dim inputByteArray(len - 1) As Byte
Dim x, i As Integer
For x = 0 To len - 1
i = Convert.ToInt32(Text.Substring(x * 2, 2), 16)
inputByteArray(x) = CType(i, Byte)
Next
des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8))
des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8))
Dim ms As New System.IO.MemoryStream()
Dim cs As New CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Return Encoding.Default.GetString(ms.ToArray())
End Function
End Class
'以下是调用方法
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '加密
Dim str_Encrypt As String = DESEncrypt.Encrypt("你要加密的文本,可以是任意长度", "密码,可以很长,如果省略这个参数就是默认的12345678")
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click '解密
Dim str_Decrypt As String = DESEncrypt.Decrypt("你要解密的文本, 可以是任意长度", "加密时用到的密码,如果省略这个参数就是默认的12345678")
End Sub
1、安装加密狗驱动程序:下载加密狗驱动程序,安装到计算机中。
2、导入加密桥帆狗类库:在vb点虐 程序扰橘中,导入加密狗类库,可以使用加密狗类库中的API函数。
3、调用API函数:调用加密狗类库中的API函数,实现与加密狗的缓消团交互,实现加密狗的功能。