URL加密解密完整解决方案
常见网页加密方法和破解对策

常见网页加密方法和破解对策[dvnews_page]常见网页加密方法和破解对策(一)右键弹出窗口加密。
程序如下:<script language=“JavaScript”><!--document.onmousedown=clickfunction click() {if ( event.button==2) {alert(‘不准查看源文件’) }if ( event.button==3) {alert(‘不准查看源文件’) }}//-->aScript”><!--document.onmousedown=clickfunction click() {{window.location=“index.html”; alert(‘不准查看源文件’); }}//--></script>由于在NC中无法定义左右键,只有加上window.location=“index.html”令其一旦激活鼠标事件就转向首页或其它Web页,否则在NC中右键按了“确定”后,还会弹出快捷菜单。
缺点是在IE5.0左键也被禁止,不过在NC4.5只要按在链接上,仍能正常转向Web页。
用乱码显示链接、调用地址加密。
利用某些函数把URL字符转换成ASCII码,从而达到隐藏链接Frame页面和*.js,*.asp等脚本的目的。
返回ASCII码escape(character),ASCII码为%XX格式,XX是十六进制,如空格键为%20。
返回字符unEscape(string)如:<!—var Words=“ %3Cframeset%20BORDER%3D%220%22%20FRAMEBORDER%3D%220%22 %20FRAMESPACING%3D%220%22%20rows%3D%22100%25%22%3E%0D%0A%20%20%3Cfram e%20SRC%3D%22http%3A///XXX/XXX/%22%20NAME%3D%22oos1%22%20”// --></script>我们只要运行以下语句,可还原“乱码”<script LANGUAGE=“JAVASCRIPT”>var Words=“乱码”document.write(unescape(Words))</script>什么??没有输出!呵呵,原乱码是完整的JavaScript语句,当然不能显示,把%3C删去破坏其格式,输出frameset BORDER=“0” FRAMEBORDER=“0” FRAMESPACING=“0” rows=“100%”> 再把下一个%3C删去,所有字符都出来了哦。
url安全解决方案

URL安全解决方案1. 概述URL(Uniform Resource Locator)是用于定位资源的字符串。
在互联网应用程序中,URL被广泛使用来传递参数、定位资源和跳转页面等。
然而,URL安全性问题是一个常见的网络安全威胁。
攻击者可以通过修改URL参数、注入恶意代码或进行其他恶意行为来导致安全漏洞。
为了保护应用程序和用户的安全,我们需要实施URL安全解决方案。
本文将介绍一些常见的URL安全问题,并提供相关的解决方案,以保护应用程序和用户的安全。
2. URL安全问题2.1 参数篡改参数篡改是指攻击者通过修改URL中的参数来实现攻击目的。
例如,攻击者可以修改URL中的商品ID,以获取未授权的信息或访问受限资源。
2.2 注入攻击URL注入攻击是一种常见的安全漏洞,攻击者通过在URL中注入恶意代码来执行恶意操作。
例如,攻击者可以在URL参数中注入SQL语句,以获取或修改数据库中的数据。
2.3 CSRF攻击CSRF(Cross-Site Request Forgery)攻击是指攻击者通过伪造用户的请求,实现非法操作。
攻击者可以通过构造包含恶意URL的页面,诱使用户访问并执行非法操作,如修改用户信息、发起转账等。
2.4 XSS攻击XSS(Cross-Site Scripting)攻击是指攻击者通过在URL参数中注入恶意脚本代码,实现对用户浏览器的控制。
一旦用户访问包含恶意URL的页面,恶意脚本代码将在用户浏览器中执行,攻击者可以窃取用户的敏感信息或进行其他恶意操作。
3. URL安全解决方案为了解决URL安全问题,可以采取以下措施:3.1 参数校验在服务端对URL参数进行严格校验,包括长度、格式和值的合法性等。
对于需要权限控制的参数,还可以检查用户的权限是否足够。
如果发现异常或非法参数,可以拒绝处理请求或返回错误信息。
3.2 参数加密对于敏感的URL参数,可以在传输过程中进行加密。
可以使用对称加密算法或非对称加密算法对参数进行加密,并在服务端进行解密。
URL加密解密

string ID = System.Text.Encoding.Default.GetString(Convert.FromBase64String(Request.QueryString["id"].ToString().Replace("%2B","+")));
public class TestCode {
public static void main(String[] args) {
String str="你好吗";
try {
//将 String 转换为 application/x-www-form-urlencoded MIME 格式
response.sendRedirect(loginForm.getUrl()+"&username=" + encodeUserName + "&onlines=" + onlines);
}else{
response.sendRedirect("welcome.do");
String fullUrl = uri.toString() + "?" + queryStr;
String decodeStr=.URLDecoder.decode(fullUrl, "UTF-8");//这个就是按照utf-8格式解密的方法
%>
System.out.println("codestr:"+codestr);
decodeStr=.URLDecoder.decode(codestr, "gb18030");
URL参数加密解密

URL参数加密解密在Web开发中,为了传递参数,通常会将参数附加在URL中。
然而,有时候我们需要对敏感信息进行加密,以保护用户的隐私和安全。
在这种情况下,URL参数加密就变得很重要。
1. Base64加密:Base64是一种基于64个字符的编码方法,它可以将二进制数据转换为可打印字符。
使用Base64加密,可以将参数数据转换成一串不可读的字符。
在接收端,再进行解码,还原成原始的参数数据。
2.对称加密算法:对称加密算法使用相同的密钥进行加密和解密。
常见的对称加密算法有DES、AES和RC4等。
使用对称加密算法,我们可以将参数数据进行加密,然后将密文作为URL参数传输。
接收端再使用相同的密钥进行解密,还原成原始的参数数据。
3.非对称加密算法:非对称加密算法使用两个密钥,一个是公钥,一个是私钥。
公钥用于加密数据,私钥用于解密数据。
使用非对称加密,我们可以将参数数据使用公钥进行加密,然后将密文作为URL参数传输。
接收端使用私钥进行解密,还原成原始的参数数据。
4. Hash算法:Hash算法是一种将数据转换成固定长度摘要的算法。
常见的Hash算法有MD5、SHA-1和SHA-256等。
使用Hash算法,我们可以将参数数据进行Hash运算,得到一个摘要值。
然后将该摘要值作为URL参数传输。
接收端也进行相同的Hash运算,比对两个摘要值是否一致,从而验证参数数据的完整性。
不论使用哪种URL参数加密方法,我们都需要在传输过程中保证密钥的安全。
如果密钥被黑客截取,他们就可以轻松地解密参数数据,这将对用户的隐私和安全造成威胁。
因此,在使用URL参数加密时,需要注意密钥的保护,可以使用HTTPS协议进行传输,以确保传输的安全性。
另外,使用URL参数加密还需要考虑性能和效率。
加密和解密过程通常会增加系统的开销,因此需要谨慎地选择加密算法和密钥长度,以平衡安全性和性能的需求。
总结起来,URL参数加密是一种保护用户隐私和安全的重要手段。
url参数加密和解密 简书

URL 参数的加密和解密主要涉及到的知识点包括基本的加密解密方法(例如,AES,RSA 等)、数据编码/解码等。
以下是简书的一个基本例子,这个例子使用了 AES 加密和解密:首先,你需要安装 pycryptodome 这个库,可以通过 pip 安装: ```pip install pycryptodome```然后,你可以使用以下代码进行 AES 加密和解密:```pythonfrom Crypto.Cipher import AESfrom Crypto.Util.Padding import pad, unpadfrom Crypto.Random import get_random_bytesimport base64def encrypt_aes(data, key):cipher = AES.new(key, AES.MODE_CBC) # 创建一个新的cipher对象# 确保数据长度是16的倍数,如果不是,则使用PKCS7进行填充padded_data = pad(data.encode('utf-8'), AES.block_size)encrypted_data = cipher.encrypt(padded_data) # 加密数据iv = cipher.iv # 获取初始化向量# 将初始化向量和加密后的数据编码为base64字符串以便于传输return base64.b64encode(iv + encrypted_data).decode('utf-8')def decrypt_aes(encrypted_data, key):# 解码base64字符串以获取初始化向量和加密后的数据iv_encrypted_data = base64.b64decode(encrypted_data) iv = iv_encrypted_data[:AES.block_size] # 获取初始化向量cipher = AES.new(key, AES.MODE_CBC, iv=iv) # 使用初始化向量创建一个新的cipher对象decrypted_data = unpad(cipher.decrypt(iv_encrypted_data[AES.block_size:]), AES.block_size) # 解密数据并去除填充return decrypted_data.decode('utf-8') # 返回解密后的字符串```使用示例:```pythonkey = get_random_bytes(16) # 生成一个随机的16字节密钥data = 'Hello, world!' # 需要加密的数据encrypted = encrypt_aes(data, key) # 加密数据print('Encrypted:', encrypted) # 打印加密后的数据decrypted = decrypt_aes(encrypted, key) # 解密数据print('Decrypted:', decrypted) # 打印解密后的数据,应该和原始数据相同```。
URL地址编码和解码

URL地址编码和解码0. 参考1.2.1. The main parts of URLsA full BNF description of the URL syntax is given in Section 5.In general, URLs are written as follows:<scheme>:<scheme-specific-part>A URL contains the name of the scheme being used (<scheme>) followedby a colon and then a string (the <scheme-specific-part>) whoseinterpretation depends on the scheme.Scheme names consist of a sequence of characters. The lower caseletters "a"--"z", digits, and the characters plus ("+"), period("."), and hyphen ("-") are allowed. For resiliency, programsinterpreting URLs should treat upper case letters as equivalent tolower case in scheme names (e.g., allow "HTTP" as well as "http").注意字母不区分⼤⼩写2. python22.11 >>> import urllib2 >>> url = 'http://web '3 >>> url_en = urllib.quote(url) #空格编码为“%20”4 >>> url_plus = urllib.quote_plus(url) #空格编码为“+”5 >>> url_en_twice = urllib.quote(url_en)6 >>> url7'http://web '8 >>> url_en9'http%3A//web%'10 >>> url_plus11'http%3A%2F%2Fweb+'12 >>> url_en_twice13'http%253A//web%'#出现%25说明是⼆次编码14#相应解码15 >>> urllib.unquote(url_en)16'http://web '17 >>> urllib.unquote_plus(url_plus)18'http://web '2.2 URL含有中⽂1 >>> import urllib2 >>> url_zh = u'/tag/美国'3 >>> url_zh_en = urllib.quote(url_zh.encode('utf-8')) #参数为string4 >>> url_zh_en5'http%3A///tag/%E7%BE%8E%E5%9B%BD'6 >>> print urllib.unquote(url_zh_en).decode('utf-8')7 /tag/美国3. python33.11 >>> import urllib2 >>> url = 'http://web '3 >>> url_en = urllib.parse.quote(url) #注意是urllib.parse.quote4 >>> url_plus = urllib.parse.quote_plus(url)5 >>> url_en6'http%3A//web%'7 >>> url_plus8'http%3A%2F%2Fweb+'9 >>> urllib.parse.unquote(url_en)10'http://web '11 >>> urllib.parse.unquote_plus(url_plus)12'http://web '3.2 URl含中⽂1 >>> import urllib2 >>> url_zh = '/tag/美国'3 >>> url_zh_en = urllib.parse.quote(url_zh)4 >>> url_zh_en5'http%3A///tag/%E7%BE%8E%E5%9B%BD'6 >>> urllib.parse.unquote(url_zh_en)7'/tag/美国'4. 其他1 >>> help(urllib.urlencode)2 Help on function urlencode in module urllib:34 urlencode(query, doseq=0)5 Encode a sequence of two-element tuples or dictionary into a URL query string. 67 If any values in the query arg are sequences and doseq is true, each8 sequence element is converted to a separate parameter.910 If the query arg is a sequence of two-element tuples, the order of the11 parameters in the output will match the order of parameters in the12 input.1314 >>>。
url加密方法

url加密方法一、背景介绍随着互联网的发展,越来越多的信息被传输到网络上,保护数据的安全性成为了互联网安全的重要问题。
其中,url加密方法是一种常见的加密方式,可以有效地保护数据的安全性。
本文将详细介绍url加密方法及其实现步骤。
二、url加密方法1.对称加密算法对称加密算法是一种常见的url加密方法,它使用相同的密钥进行加解密操作。
其中,DES、AES、RC4等都是常见的对称加密算法。
其实现步骤如下:(1)选择一个合适的对称加密算法。
(2)生成一个随机数作为秘钥。
(3)使用秘钥对需要传输的数据进行加密操作。
(4)将秘钥和加密后的数据发送给接收方。
(5)接收方使用秘钥对数据进行解密操作。
2.非对称加密算法非对称加密算法是另一种常见的url加密方法,它使用公共和私有两个不同的秘钥进行加解密操作。
其中,RSA是最常用的非对称加密算法之一。
其实现步骤如下:(1)生成公共和私有两个不同的秘钥。
(2)将公共秘钥发送给需要传输数据的接收方。
(3)使用私有秘钥对需要传输的数据进行加密操作。
(4)将加密后的数据发送给接收方。
(5)接收方使用公共秘钥对数据进行解密操作。
3.哈希加密算法哈希加密算法是一种常见的url加密方法,它将任意长度的消息压缩成一个固定长度的摘要信息。
其中,MD5、SHA-1、SHA-2等都是常见的哈希加密算法。
其实现步骤如下:(1)选择一个合适的哈希加密算法。
(2)将需要传输的数据进行哈希运算。
(3)将哈希值作为url中的参数传输给接收方。
(4)接收方使用相同的哈希算法对数据进行哈希运算,并将结果与发送方传输过来的结果进行比较。
三、url加密方法实现步骤1.对称加密算法实现步骤(1)选择一个合适的对称加密算法,如AES。
(2)生成一个随机数作为秘钥,可以使用Java中提供的SecureRandom类生成随机数。
(3)使用秘钥对需要传输的数据进行加密操作,可以使用Java中提供的Cipher类实现AES算法。
java进阶12Base64UrlBase64Hex加密解密技术

java进阶12Base64UrlBase64Hex加密解密技术 java的加密与解密技术: 现在的加密技术主要有 单向加密算法:以MD5 SHA算法为代表 对称加密算法:以DES 三重DES AES PBE算法为代表 ⾮对称加密算法:以RSA为代表 简要的说下这三种加密算法的区别 先是单向加密算法,顾名思义,它不会有密钥,因为它是单向的,加密之后⽆法解密,就连程序猿都⽆法知道加密之后的东西是什么 主要⽤处是数据完整性的验证。
对称加密算法,其特征是公钥与私钥相同。
⼀般⽤来数据储存,⽐如将数据加密之后存⼊数据库,那么数据库管理员就⽆法泄密数据库中的类容 有密钥的⼈却可以根据密钥解密数据库中的真正数据。
⾮对称加密算法,就是公钥与私钥不同,⼀般公钥公开,私钥在你想给⼈看到数据的⼈的⼿上,利⽤私钥来解密数据。
它⼀般是⽤于数据传输的加密。
先由浅⼊深,先说说伪加密 Base64 UrlBase64 Hex ⾸先java api中没有实现这三个类,所以你需要下载jar包。
就是这2个。
先来说说Base64吧。
新建它的类。
package Cipher;import org.bouncycastle.util.encoders.Base64;public class Base64Coder {/** 经Base64编码后的字符串的字符数是以4为单位的整数倍* */public final static String ENCODING="UTF-8";//加密public static String encode(String data) throws Exception{byte[] b=Base64.encode(data.getBytes(ENCODING));//执⾏编码return new String(b,ENCODING);}//解密public static String decode(String data) throws Exception{byte[] b=Base64.decode(data.getBytes(ENCODING));//解密编码return new String(b,ENCODING);}} 然后在主函数中运⾏下。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
URL加密解密完整解决方案采用:.URLEncoder.encode(Base64编码(加密字串), StringCode) 这样的方法来对url中的参数进行加密。
首先我们先说一下如何加密。
一、算法的选择:对于像对url中的参数进行加密的过程,我不建议使用rsa或者是三重des这样的加密算法,主要原因在于性能和速度会受影响。
我建议大家使用对称加密如:DES或者是PBE算法。
我们在这边就使用PBEWithMD5AndDES来实现加密。
二、加密原理对于一个纯文本,加密后它会变成一堆乱码,这堆乱码包括了许多非法字符,我们不希望把这些字符放入bean中,因此在加密完后,我们还要对加密结果进行base64编码。
PBE从字面上理解,它必须使用一个口令,我们不希望我们的加密过于复杂而影响页面跳转的速度,因此我们不采用口令+KEY的形式,我们这边的口令就是我们的KEY。
因此:我们的整个加密过程实现如下:输入口令(KEY)--> 加密文本 --> 以base64对加密后的结果进行编码-->以.URLEncoder.encode编码成浏览器可以识别的形式-->传输给接受的action而解密过程如下:接受的action得到参数-->以base64对结果进行解码-->得到纯加密文本-->解密-->得到解密后的值三、BASE64这边对于BASE64的原理不多说了,只说实现,目前网上有很多实现方式,有自己写的,有用sun.misc.*的,我们在这个例子里将使用javax.mail.internet.MimeUtility自带的base64编码工具。
需要引入activation.jar和mail.jar两个包。
下面是具体的实现:import javax.mail.internet.MimeUtility;public class Base64 {public static byte[] encode(byte[] b) throws Exception {ByteArrayOutputStream baos = null;OutputStream b64os = null;try {baos = new ByteArrayOutputStream();b64os = MimeUtility.encode(baos, "base64");b64os.write(b);b64os.close();return baos.toByteArray();} catch (Exception e) {throw new Exception(e);} finally {try {if (baos != null) {baos.close();baos = null;}} catch (Exception e) {}try {if (b64os != null) {b64os.close();b64os = null;}} catch (Exception e) {}}}public static byte[] decode(byte[] b) throws Exception { ByteArrayInputStream bais = null;InputStream b64is = null;try {bais = new ByteArrayInputStream(b);b64is = MimeUtility.decode(bais, "base64");byte[] tmp = new byte[b.length];int n = b64is.read(tmp);byte[] res = new byte[n];System.arraycopy(tmp, 0, res, 0, n);return res;} catch (Exception e) {throw new Exception(e);} finally {try {if (bais != null) {bais.close();bais = null;}} catch (Exception e) {}try {if (b64is != null) {b64is.close();b64is = null;}} catch (Exception e) {}}}}四、加密解密工具类的实现有了BASE64的工具类,下面的工作将变得简单了,编写我们的加密解密工具类吧:import java.io.DataOutputStream;import java.io.FileOutputStream;import java.security.*;import javax.crypto.*;import javax.crypto.spec.*;import java.util.*;import mons.logging.Log;import mons.logging.LogFactory;public class SecurityHelper {protected final static Log logger = LogFactory.getLog(SecurityHelper.class);private final static int ITERATIONS = 20;public static String encrypt(String key, String plainText) throws Exception {String encryptTxt = "";try {byte[] salt = new byte[8];MessageDigest md = MessageDigest.getInstance("MD5");md.update(key.getBytes());byte[] digest = md.digest();for (int i = 0; i < 8; i++) {salt[i] = digest[i];}PBEKeySpec pbeKeySpec = new PBEKeySpec(key.toCharArray());SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");SecretKey skey = keyFactory.generateSecret(pbeKeySpec);PBEParameterSpec paramSpec = new PBEParameterSpec(salt, ITERATIONS); Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES");cipher.init(Cipher.ENCRYPT_MODE, skey, paramSpec);byte[] cipherText = cipher.doFinal(plainText.getBytes());String saltString = new String(Base64.encode(salt));String ciphertextString = new String(Base64.encode(cipherText));return saltString + ciphertextString;} catch (Exception e) {throw new Exception("Encrypt Text Error:" + e.getMessage(), e);}}public static String decrypt(String key, String encryptTxt)throws Exception {int saltLength = 12;try {String salt = encryptTxt.substring(0, saltLength);String ciphertext = encryptTxt.substring(saltLength, encryptTxt.length());byte[] saltarray = Base64.decode(salt.getBytes());byte[] ciphertextArray = Base64.decode(ciphertext.getBytes());PBEKeySpec keySpec = new PBEKeySpec(key.toCharArray());SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");SecretKey skey = keyFactory.generateSecret(keySpec);PBEParameterSpec paramSpec = new PBEParameterSpec(saltarray,ITERATIONS);Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES");cipher.init(Cipher.DECRYPT_MODE, skey, paramSpec);byte[] plaintextArray = cipher.doFinal(ciphertextArray);return new String(plaintextArray);} catch (Exception e) {throw new Exception(e);}}注意上面加粗的三处地方:private final static int ITERATIONS = 20;上面的值越大,加密越深,一般例子都以"Java安全性编程指南”这本书中的例子的值为准,设成1000,我们在这边只需要20就够了,原因就是考虑到加解密的速度问题。
int saltLength = 12;这是base64解码后的盐的长度,加密后再经BASE64编码后盐的长度为8,BASE64解码后盐的长度为12,至于为什么,这也是根据BASE64的原理得出的,具体可以看BASE64原理,网上很多,说得也都很简单。
PBEWithMD5AndDES我们使用的是PBEWithMD5AndDES加密。
下面编写一个测试类public static void main(String[] args) {String encryptTxt = "";String plainTxt = "hello oh my god";try {System.out.println(plainTxt);encryptTxt = encrypt("mypassword01", plainTxt);plainTxt = decrypt("mypassword01", encryptTxt);System.out.println(encryptTxt);System.out.println(plainTxt);} catch (Exception e) {e.printStackTrace();System.exit(-1);}}}五、工具类在struts action中的具体使用MyTaskDTO taskDTO = new MyTaskDTO();TaskInstance ti = (TaskInstance) it.next();taskDTO.setTaskName(ti.getName());taskDTO.setTaskCreateDate(sd.format(ti.getCreate()));taskDTO.setTaskDescr(ti.getDescription());/* no encrypted data */String taskId = String.valueOf(ti.getId());String tokenId = String.valueOf(ti.getToken().getId());processImgName = PropertyUtil.getProperty(Constants.BPM_PROCESS_PAYMENT_PROCESSIMAGE).toString()+ ".jpg";processDefId = String.valueOf(ti.getToken().getProcessInstance().getProcessDefinition().getId());/* encrypted data */taskId = EncryptUrlPara.encrypt(taskId);tokenId = EncryptUrlPara.encrypt(tokenId);processImgName = EncryptUrlPara.encrypt(processImgName);processDefId = EncryptUrlPara.encrypt(processDefId);taskDTO.setTaskId(taskId);taskDTO.setTokenId(tokenId);taskDTO.setProcessDefinitionId(processDefId);taskDTO.setProcessImageName(processImgName);六、jsp页面中的encode把上述这个bean放入request中,带到下一个jsp页面中后,在jsp页面的处理如下:String processImgPath=taskDTO.getProcessImageName();String processDefId=taskDTO.getProcessDefinitionId();processImgPath=.URLEncoder.encode(processImgPath,"UTF-8");processDefId=.URLEncoder.encode(processDefId,"UTF-8");String showProcessImgUrl=request.getContextPath()+"/queryMyTask.do";<ahref="<%=showProcessImgUrl%>?method=showProcessImg&processDefinitionId=<%=processD efId%>&processImgPath=<%=processImgPath%>" target="_blank"><u><span class="left_txt">查看当前进程</span></u></a>七、在接受加密参数的action中对加密的值进行解密我们假设我们的接受的action为: queryMyTask.do,它接受一系列的参数,基中,processDefId和processImgPath是加密的。