当前位置:编程学习 > JAVA >>

技术搜集贴 基于Java的Web开发安全技术探索

安全问题始终是Web开发中的重中之重

服务端与客户端的通信安全

用户的信息安全

数据服务器的访问安全

代码的隐藏问题

PKI PMI  SSL TLS 加密技术越来越多

小僧在此特立此贴。

大家畅所欲言,别把自己当外人啊。都是地球人。呵呵 --------------------编程问答-------------------- 我支持代码开源 --------------------编程问答-------------------- 安全---最重要还是设计的合理,逻辑的严密。 --------------------编程问答-------------------- 世界上就没有绝对安全的东西,
就是看破解的代价和破解之后取得利益的权衡 --------------------编程问答--------------------
引用 3 楼 sjkof 的回复:
世界上就没有绝对安全的东西, 
就是看破解的代价和破解之后取得利益的权衡


代码写的比较烂,黑客看了都头疼,不用加密了。哈哈!!!也没值钱东西。 --------------------编程问答--------------------
引用 3 楼 sjkof 的回复:
世界上就没有绝对安全的东西,
就是看破解的代价和破解之后取得利益的权衡


兄弟你的相对论学的很不错。
但是尽管知道自己家里装了防盗门小偷仍然可以来,但是你还是选择了防盗门,而没有选择木门呢。

虽然都是门,因为是防盗的。所以被普及。

我们要了解客户的心里,加大自己产品的竞争力和生存力

如果那些认为安全真的不重要的人就不要在这里进行所谓的高谈阔论了,否则我会怀疑是某黑客集团的马甲过来了。 --------------------编程问答-------------------- web中的安全控制也是层层递进的,不能只在某一处设置安全控制,尽管这会给用户在某些方面带来些影响,但是还是安全第一吗。 --------------------编程问答--------------------
引用 6 楼 mumu_java 的回复:
web中的安全控制也是层层递进的,不能只在某一处设置安全控制,尽管这会给用户在某些方面带来些影响,但是还是安全第一吗。

小僧说的是 安全是重中之重并不是所谓的第一。
请不要偷换概念。
小僧也知道一旦和所谓的第一扯上关系,大家就会为了这个东西口水一番。
没有意义。

希望各位感兴趣 有经验的CSDNer 整理下哈

PS:

其实我挺莫名奇妙滴。我什么时候强调一处的安全设置了。

我开的搜集贴 就是搜集web开发体系的安全应用。 --------------------编程问答-------------------- 这里找到一个PKI应用java代码  在这里分享
keytool -genkey -dname "CN=demo, OU=softDept, O=company, L=puddong,S=shanghai, C=cn" -alias demo -keyalg RSA -keysize 1024 -keystore demoKeystore -validity 3650 -storepass storePwd -keypass demoPwd
生成保存公钥和私钥的密钥仓库,保存在demoKeystore文件中。这里storepass 和 keypass 不要有java 正则表达式中的特殊字符,否则程序里要转义麻烦。

keytool -export -alias demo -keystore demoKeystore -rfc -file demo.cer //从密钥仓库中导出保存公钥的证书
输入keypass 即demoPwd 


  try{     
   //密钥仓库
   KeyStore ks = KeyStore.getInstance("JKS");
//读取密钥仓库
   FileInputStream ksfis = new FileInputStream("demoKeystore");
   BufferedInputStream ksbufin = new BufferedInputStream(ksfis);
   char[] storePwd = "storePwd".toCharArray();
   ks.load(ksbufin, storePwd);
   ksbufin.close();
   char[] keyPwd = "demoPwd".toCharArray();
//从密钥仓库得到私钥
   PrivateKey priK = (PrivateKey) ks.getKey("demo", keyPwd);  
//生成cipher
   Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding",new org.bouncycastle.jce.provider.BouncyCastleProvider());
//用私钥初始化cipher
   cipher.init(Cipher.ENCRYPT_MODE, priK);
   byte[] plain = "This is plain text".getBytes("UTF-8");
   
   //因为用的1024位rsa算法,一次只能加密1024/8-11字节数据,分开加密
   byte[] code = new byte[(((plain.length-1)/117+1))*128];  
            int ixplain = 0;
            int ixcode = 0;
            while((plain.length - ixplain) > 117) {//每117字节做一次加密
                ixcode += cipher.doFinal(plain, ixplain, 117, code, ixcode);
                ixplain += 117;
            }
            cipher.doFinal(plain, ixplain, plain.length - ixplain, code, ixcode);
            //加密后的code
            System.out.println(Arrays.toString(code));
            //通常会用base64编码
           String base64 = encoder.encode(code);

   CertificateFactory certificatefactory = CertificateFactory
     .getInstance("X.509");
   //读取证书
   FileInputStream fin = new FileInputStream("demo.cer");
   X509Certificate certificate = (X509Certificate) certificatefactory
     .generateCertificate(fin);
   fin.close();
   //得到公钥
   PublicKey pubK = certificate.getPublicKey();
         //初始化cipher
            cipher.init(Cipher.DECRYPT_MODE, pubK);
      //base64解码
            code = decoder.decodeBuffer(base64);
            System.out.println(Arrays.toString(code));
            byte[] plain2 = new byte[code.length];
            int ixplain2 = 0;
            int ixcode2 = 0;
            while((code.length - ixcode2) > 128) {//每128字节做一次解密
                ixplain2 += cipher.doFinal(code, ixcode2, 128, plain2, ixplain2);
                ixcode2 += 128;
            }
            ixplain2 += cipher.doFinal(code, ixcode2, code.length - ixcode2, plain2, ixplain2);
            String s2 = new String(plain2, 0, ixplain2, "UTF-8");
            System.out.println(s2);
   
  }catch(Exception ex){
   ex.printStackTrace();
  }

keytool使用方法可以参考jdk文档
Java keytool工具的作用及使用方法

引用地址 :http://blog.csdn.net/zhanghaooy/archive/2008/10/02/3010107.aspx --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 收藏学习 --------------------编程问答-------------------- mark --------------------编程问答-------------------- mark and up and study --------------------编程问答-------------------- 关注。。。 --------------------编程问答-------------------- mark --------------------编程问答-------------------- web开发过程中安全问题越来越重要,我觉得首先还是要从程序本身着手,不要留下明显的安全漏洞。 --------------------编程问答-------------------- 关注。。。顶一个
--------------------编程问答-------------------- 采用安全限制,目前java的web开发大多于采用ssh,基本的可采用 acegi,严格的可单点登录 --------------------编程问答-------------------- 有感于安全,没有绝对的安全,安全永远是被动的 --------------------编程问答-------------------- 自己还没写过web开发安全技术的加密,我只知道有个ssl, --------------------编程问答-------------------- mark --------------------编程问答-------------------- 不懂 --------------------编程问答-------------------- 安全性确实重要 --------------------编程问答--------------------

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Random;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * AES 加解密,附加MD5
 **/

public class Encryptor {

/**
 * 对一个字符串进行MD5加密,返回一个加密后的密文
 * @param String pwd
 *        要加密的字符串
 * @return 加密后的字符串
 */
public static String MD5(String pwd) throws NoSuchAlgorithmException,Exception
{
try{
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(pwd.getBytes());
byte[] hash = md5.digest();

/* 将二进制的字节码转成十六进制的字符串 */
String result = Base64.getBase64Encode(hash);
return result;
}catch(NoSuchAlgorithmException e){
throw new NoSuchAlgorithmException();
}catch(Exception ex){
throw ex;
}
}

public static String AESEncrypt(String pwd,String strEncpt)throws Exception
{
try{
            byte[] bytIn = strEncpt.getBytes("UTF8");
            //AES加密
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            kgen.init(128, new SecureRandom(pwd.getBytes()));
            SecretKey skey = kgen.generateKey();
            byte[] raw = skey.getEncoded();
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

            byte[] bytOut = cipher.doFinal(bytIn);
            String ecrOut = Base64.getBase64Encode(bytOut);
            return ecrOut;

}catch(Exception e){
e.printStackTrace();
System.out.println(e.getMessage());
throw new Exception();
}
}

public static String AESDencrypt(String pwd,String strDencpt)throws Exception
{
try{
byte[] bytIn = Base64.getBase64Dencode(strDencpt);

            //AES加密
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            kgen.init(128, new SecureRandom(pwd.getBytes()));
            SecretKey skey = kgen.generateKey();
            byte[] raw = skey.getEncoded();
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);

            //写文件
            byte[] bytOut = cipher.doFinal(bytIn);
            String ecrOut = new String(bytOut,"UTF8");
            return ecrOut;
}catch(Exception e){
e.printStackTrace();
             throw new Exception();
}
}

/**
 * 生一个长度为len 的随机数
 * @param int len
 *         生成的随机密码的长度
 * @return String pwd
 *         返回生成的随机密码
 */
public static String getRandomKey(int len)
{
        StringBuffer buffer = new StringBuffer("123456789");
        StringBuffer pwd = new StringBuffer(); 
        Random r = new Random(); 
        int range = buffer.length(); 
        for (int i = 0; i < len; i ++) {
         int k = Math.abs(r.nextInt(range));
         if(k>=0 && k<range){
                pwd.append(buffer.charAt(k)); 
         }
        } 
        return pwd.toString(); 
}


public static void main(String[] args)
{
try{
//String ms = MD5("12345678");
String ms = "abcdefg==akl;k/*,";
System.out.println(ms+"----------------明文");
String key = getRandomKey(8);
System.out.println(key+"----------------密钥");
String ins = AESEncrypt(key,ms);
System.out.println(ins+"----------------密文");
String outs = AESDencrypt(key,ins);
System.out.println(outs+"----------------解后明文");
}catch(Exception e){
e.printStackTrace();
System.out.println("----------------------");
}
}
}


//字节数组及字符串转换类
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class Base64 {

public static String encode(byte[] data) {
StringBuffer sb = new StringBuffer();
int len = data.length;
int i = 0;
int b1, b2;

while (i < len) {
byte ms = data[i];
b1 = (ms >>> 4) & 0xf;// 高四位
b2 = ms & 0xf;// 低四位
sb.append(Integer.toHexString(b1));
sb.append(Integer.toHexString(b2));
i++;
}
return sb.toString();
}

public static byte[] decode(String str) throws IOException {
int len = str.length();
ByteArrayOutputStream buf = new ByteArrayOutputStream(len);
int i = 0;
if (len % 2 != 0) {
throw new IOException("输入的长度只能为偶数!");
}

while (i < len) {
String tmp_hight = str.substring(i, i + 1);
String tmp = str.substring(i, i + 2);
System.out.println(tmp_hight);
int dec_sign = Integer.parseInt(tmp_hight, 16) >>> 3;
int dec = 0;
if (dec_sign == 1) {
dec = Integer.parseInt(tmp, 16) ^ 0xff;
dec = dec + 1;
dec = -dec;
} else {
dec = Integer.parseInt(tmp, 16);
}

buf.write(dec);
i = i + 2;
}
return buf.toByteArray();
}

public static String getBase64Encode(byte[] src) throws Exception {
try {
return Base64.encode(src);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}

public static byte[] getBase64Dencode(String src) throws Exception {
try {
return Base64.decode(src);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}

}

--------------------编程问答-------------------- 对异常处理不是很熟...如果有更好的处理办法..望兄弟们告诉我...一直在烦这个... --------------------编程问答-------------------- 古大侠说过...只有死人才会保守秘密....
so.. --------------------编程问答--------------------
引用 24 楼 cirfye 的回复:
Java codeimportjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;importjava.security.SecureRandom;importjava.util.Random;importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;importjavax.crypto.SecretKey;importjavax.crypto.spec.SecretKeySpec;/*** AES 加解密,附加MD5
 **/publicclassEncryptor {/*** 对一个字符串进行MD5加密,返回一个加密后的密文
     *@paramString pwd
     *…

感谢cirgye
分享了MD5加密方式

大家不要把安全看的太片面了 其实对于我们应用开发程序员来说 安全相当滴重要了  
有些朋友老是捧着 没有绝对的安全 的老话题来说真的没有必要

也许有的人到现在仍然就接触不到整体安全问题的设计和编码,借用老某的话  一个都不能少 
我强调的是安全的重要性,却不是否定其他因素的必要性

这个只是个专题贴,我们就谈如何安全,怎么安全,不谈安全必不必要。

--------------------编程问答-------------------- SSL利用JDK自带keytool实现步骤  在网上找到的 现在不记得出处了 贴出来大家分享

实现: 

JDK里面自带了一个密钥生成工具keytool,可以通过它生成SSL通信需要的密钥对,或者生成自签名的证书。 

所有密钥对或者签名证书都是存放在“keystore”密钥仓库中,由它来管理。 

下面结合具体例子说明:(java WEB容器:tomcat 5.5) 

1,生成服务端密钥仓库, 

keytool -genkey -alias svrkey -keyalg RSA -keystore c:\svr.jks -validity 365 

"alias"是生成的密钥别名,密钥的导入导出都需要由别名来定位。 

"keystore"生成的密钥仓库 

"validity"生成密钥仓库的有效期(天) 

随后会要求输入密钥仓库入口密码,比如: lostsky_11

输完密码后,接着会要求一系列的输入,无非是单位,所在地区之类的信息, 

但是第一项很重要!为输入服务端域名或IP,如: 192.168.1.3或www.591pic.com 

必须与服务器域名或IP相同,否则SSL连接无法建立(这也是SSL通信验证的一部分) 

2,在tomcat_home/conf/server.xml中配置: 

找到ssl通信配置那一段,加入: 

keystoreFile="d:\svr.jks" keystorePass="lostsky_11" 

服务器启动时会从中寻找用于建立ssl连接的密钥 

3,导出服务端证书 

keytool -export -alias svrkey -file d:\svr.cer -keystore d:\svr.jks 

"alias"为想导出的密钥的别名,"file"为导出的证书,"keystore"为存储着导出密钥的仓库 

4,生成客户端密钥仓库 

keytool -genkey -alias clientkey -keyalg RSA -keystore d:\client.jks 

会要求输入仓库密码:如:midsky

5,将服务端证书导入到客户端密钥仓库 

keytool -import -file d:\svr.cer -keystore d:\client.jks 

会要求输入客户端密钥仓库的密码:如上是:midsky

这样服务端的密钥仓库就在tomcat部署完毕了, 

6,在客户端,每次访问服务端之前,加入 

"System.setProperty("javax.net.ssl.trustStore","d:\\client.jks"); 

System.setProperty("javax.net.ssl.trustStorePassword","midsky"); 

就把服务端证书添加到了客户端的信任域中,能够完成ssl通信。 

注:ssl通信主要验证三个方面: 

a, 证书是否可信(第6步) 

b, 证书是否过期(第1步:validity) 

c, 证书地址是否和当前访问地址符合(第1步) 

客户端添加信任域还有编程的动态方法,但是那样会降低通信的安全性,对于证书相对固定的服务,不建议使 

用。 



以上是客户端对于服务端的验证,这也是SSL默认的实现方式。在这种方式下,每次通信时,发起请求方(如PC 

中的BROWSER)都会验证响应方(如某个WEB服务端)的证书是否在己方信任域中,对方的证书是否过期,对方 

的域名或IP,是否与信任域中证书记载的一致;不符合其中任何一项,通信都会被拒绝。但反过来,响应方是不 

对请求方做任何验证的。所以有些需要双向验证的服务(比如某些服务只能对特定的拥有证书的用户开放),就需 

要添加客户端证书,由服务端来验证了,原理和实现与默认模式类似。
--------------------编程问答-------------------- 接触了对密码的加密,用的是MD5 --------------------编程问答--------------------
引用 18 楼 kiteinwater 的回复:
采用安全限制,目前java的web开发大多于采用ssh,基本的可采用 acegi,严格的可单点登录


单点登陆 SSO  个人认为是个易用性的方面为主的东西。

关于SSO ,现在大部分软件或引入或自己编写了  

java方面 有个著名的开源SSO OpenSSO  哪位有这方面的资料可以发上来分享下 

关于如何在项目中引入OpenSSO
有什么优点 有什么缺点都可以谈谈

我之前做过一个,缺没有使用过这个开源的。有她的源代码 可惜一直没有看  --------------------编程问答-------------------- 嗯,好帖,以前还以为,安全,就是让用户不能随便访问某些页面,莫非也是一门很深奥的学问... --------------------编程问答-------------------- 哎,费劲呀 --------------------编程问答-------------------- 感谢楼主..一直在SSL安全相关的信息..终于看到个详细的了... --------------------编程问答-------------------- 完全看不懂。 --------------------编程问答--------------------
引用 30 楼 Player26 的回复:
引用 18 楼 kiteinwater 的回复:
采用安全限制,目前java的web开发大多于采用ssh,基本的可采用 acegi,严格的可单点登录 
 

单点登陆 SSO  个人认为是个易用性的方面为主的东西。 

关于SSO ,现在大部分软件或引入或自己编写了  

java方面 有个著名的开源SSO OpenSSO  哪位有这方面的资料可以发上来分享下 

关于如何在项目中引入OpenSSO 
有什么优点 有什么缺点都可以谈谈 

我之前做过一个,缺没有使用过这个…


单点登陆,看过一些关于这方面的,但是没有在项目上用过...
WEB实现主要有两种方式:
(1)是使用cookie,每次访问时附带上客户信息,然后在服务器恢复客户的个人信息,达到单点登陆的目的.
(2)是在服务器使用一个代理服务,通过代理生成入场券,用户的每次请求都是通过了代理处理,再将请求转发到真实的服务程序处理并返回.

使用Cookies,这种方式最是简单,但是个人认为:不安全.
通过代理这种方式是安全的,但是实现复杂..

关于单点登陆的好处,我只知道两个:
一个是对于使用者来说,不用去记忆多套的账号及密码,给于用户良好的使用体验;
另一个是对系统管理员来说,也简化了管理工作,不用在每个系统里设置权限,只要在一个地方设置了权限就OK了..


这是个人理解,下面,兄弟们补充吧.. --------------------编程问答-------------------- 关注。。。顶一个  --------------------编程问答-------------------- --------------------编程问答-------------------- 很好很实用哈哈 --------------------编程问答-------------------- 自己实现安全传输的机制,加密 密码,  数字签名 sessionId.
    也可以直接使用https。 --------------------编程问答-------------------- 这个话题很好,呵呵

安全问题其实也就是客户信息和服务器信息安全,简单点说是加密,复杂点说就是加密的算法

对于代码 我比较中意开源,呵呵,所以对代码的加密混淆器都不太喜欢。

--------------------编程问答-------------------- 学习ING --------------------编程问答-------------------- 我正准备学习这方面的安全知识,没想到就被楼主提出来了,强烈支持啊~~~
希望高手们不吝赐教 --------------------编程问答-------------------- 这个讨论不错啊 --------------------编程问答-------------------- 国内web这块做的相对较弱,有几个公司真正对客户安全问题去投入人力、财力,大部分就是客户端验证,密码加密,IP限制,证书验证,其他想不出了。 --------------------编程问答-------------------- Study --------------------编程问答-------------------- 拜读! --------------------编程问答-------------------- 安全并不应当仅限于加密或验证...
还要包括逻辑的安全,代码实现时会不会存在安全问题
不然可能会存在远程非法调用问题,
这方面才是最容易忽视的.. --------------------编程问答-------------------- 能够记录session上下文的应用服务器对web安全有一定的积极意义 --------------------编程问答-------------------- 看过了。。。。 --------------------编程问答-------------------- --------------------编程问答-------------------- 我们一般用的是SSL。 --------------------编程问答-------------------- 来取经。。 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 楼主好强,标记+学习+帮顶 --------------------编程问答-------------------- 确实现在接触的关于web安全方面的东西比较少,
只是在美剧中经常看到各种研究32位或64位加密和解密算法的高手~~
在这里学习了~~ --------------------编程问答-------------------- up --------------------编程问答-------------------- mark --------------------编程问答--------------------    路过,不太懂 --------------------编程问答-------------------- web方面:1 字符串的过滤  2  数据库权限设置  3  服务器方面   4  密码的加密方面    --------------------编程问答-------------------- 用户身份校验,验证码技术,安全处理异常保护系统内部信息,防止SQL注入,数据库的事务管理和故障恢复,和服务器硬件的相关安全。 --------------------编程问答-------------------- 用户身份校验,验证码技术,安全处理异常保护系统内部信息,防止SQL注入,数据库的事务管理和故障恢复,和服务器硬件的相关安全。 --------------------编程问答-------------------- http://blog.csdn.net/cnidb/archive/2009/03/23/4018469.aspx
前段时间配置的单点登录cas,关于什么是cas网上一查便知;
使用cas,看好的就是cas使用的技术 --------------------编程问答-------------------- 没有绝对安全的,都是人想出来的么, --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 安全都是人想出来的 --------------------编程问答-------------------- 安全确实很重要 --------------------编程问答-------------------- 关注中。。。 --------------------编程问答-------------------- 我觉得前面的仁兄说得很对,安全问题不应该是在某一层去做的事情,在必要的地方都应该考虑进来

--------------------编程问答-------------------- 没有绝对的安全,就如代码一样,bug是无法全部找到的,所以产品发布后,肯定能找到漏洞, --------------------编程问答-------------------- 《权限管理认识的一些误区》里面谈到一些安全知识, 欢迎大家拍砖:
http://blog.csdn.net/accessmanager88/archive/2009/04/07/4054995.aspx
(内容有些长,所以就不贴出来了) --------------------编程问答-------------------- 这么麻烦啊
--------------------编程问答-------------------- 关注,学习中 --------------------编程问答-------------------- 关注!

顺便招人,大型支付网站招安全架构师,目前关注网上安全的同学们来看看

1、负责本网站安全框架设计
2、负责对公司研发项目进行安全评审;
3、负责本网站产品、服务的安全规范制定、推广、评审;
4、对开发,测试相关人员进行安全规范的培训,提升规范的可实施性;

职位需求: 
1、熟悉J2EE体系,具备3年以上系统分析,设计经验;
2、熟悉Web攻防技术及原理,关注业界最新的安全技术发展;
3、熟悉PKI技术及应用方案、熟悉密码技术;
4、有良好的沟通能力及组织能力,出色的团队合作精神;
--------------------编程问答--------------------
引用 4 楼 APOLLO_TS 的回复:
引用 3 楼 sjkof 的回复:
世界上就没有绝对安全的东西, 
就是看破解的代价和破解之后取得利益的权衡 
 

代码写的比较烂,黑客看了都头疼,不用加密了。哈哈!!!也没值钱东西。


写的烂的估计是垃圾网...黑客看了就直接过滤..不看了.. --------------------编程问答-------------------- 路过学习 --------------------编程问答-------------------- 不明白想表达什么主题? --------------------编程问答-------------------- 必顶贴 --------------------编程问答-------------------- http  /https
登陆IP限制

--------------------编程问答-------------------- 最打可能的全面的考虑问题 --------------------编程问答-------------------- cas --------------------编程问答-------------------- 1、权限安全
使用密码
Session超时控制
证书验证
分角色分权限
密码加密,如MD5等等(软加密、硬加密)
Session及超时控制
2、防恶意攻击
验证码核对
HTTPS
增加拦截器,过滤非法/恶意访问
IP访问控制3、恶意攻击服务器
防止SQL注入
--------------------编程问答-------------------- 代码安全:防止SQL注入
通讯安全:通讯中的帐号或者密码等重要数据加密或者全加密
--------------------编程问答--------------------
引用 74 楼 foliage11111 的回复:
引用 4 楼 APOLLO_TS 的回复:
引用 3 楼 sjkof 的回复:
世界上就没有绝对安全的东西,
就是看破解的代价和破解之后取得利益的权衡


代码写的比较烂,黑客看了都头疼,不用加密了。哈哈!!!也没值钱东西。


写的烂的估计是垃圾网...黑客看了就直接过滤..不看了..

恩是的,拍砖...狠拍....拍死还拍,拍拍拍................. --------------------编程问答-------------------- mark --------------------编程问答--------------------
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,