`
OuYangGod
  • 浏览: 54183 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Java网络安全(一)

阅读更多
  消息摘要是数据信息的数字指纹。通过某种安全散列算法(如SHA1)对数据信息进行加密,就可以生成一个20字节(MD5算法好像是16字节)的序列,这个序列就称为消息摘要。

  从安全的角度考虑,我们总是希望任何不同的数据信息都生成不同的消息摘要,但这是不可能的,就拿SHA1算法来说,消息摘要是一个20字节的序列,也就是160位的长度,一共也只有2的160次方种可能。但这已经是一个巨大的数字了,我们可以相信两个不同的数据信息总是生成不同的消息摘要。

  所以,消息摘要具有以下两个特点:
  • 如果数据信息改变了,那么消息也将根着改变;
  • 伪造者无法创建与原数据信息具有相同消息摘要的假数据信息。

  消息摘要在网络中怎样起到安全的作用呢?假设你要发送下面一段数据信息给你的朋友:
晚上一起吃饭

  你可以先生成这段数据信息的消息摘要,上面的信息用SHA1算法加密后就复到下面的消息摘要:
fa00078d5bd477e6d397dd5f7f11166a

  之后你就可以把数据和摘要分别发送给你的朋友,然后你朋友也对数据信息进行加密,并把加密生成的摘要与你发送给他的进行对比,如果一样的,那么你朋友就可以确定数据信息在传输过程中没有被别人修改过。

  当然,仅仅是靠消息摘要,还无法解决所有的安全问题,比如数据和摘要在传输过程中同时被别人窃取了,你的朋友无法保正数据是不是真的来自于你,等等。后面的文章,我们接着介绍如果通过别的方法(比如公共密钥)来解决其它的安全问题。

  下面我们来看看在Java中如何对数据进行SHA1算法或MD5算法加密。其实Java语言已经实现了这两个算法,那就是java.security包下的MessageDigest类。具体的代码网上很容易搜到现在的代码:
public static String encodePassword(byte[] data, String algorithm)
        throws NoSuchAlgorithmException
{
    MessageDigest md = MessageDigest.getInstance(algorithm);

    md.reset();
    md.update(data);

    byte[] rlt = md.digest();

    StringBuffer buf = new StringBuffer();

    for (int i = 0; i < rlt.length; i++)
    {
        if ((rlt[i] & 0xff) < 0x10)
        {
            buf.append("0");
        }

        buf.append(Integer.toHexString(rlt[i] & 0xff));
    }

    return buf.toString();
}

  首先通过MessageDigest类的getInstance(String)方法获得该类的一个实例,具体的算法通过参数指定,比如"SHA-1"或"MD5",reset()方法用于复位摘要,update方法以字节数组的方式指定要加密的数据信息,接着调用digest()方法就生成了消息摘要。

  比较有意思的是后面for块里面的代码,我第一次看这段代码的时候也是花了点功夫才弄明白。

  后面这部分代码的作用是把byte[]格式的摘要转换成16进制的字符串。在Java中,byte占有8个位,转换成16进制的话,也就是2位,所以当这个byte小于16的话,要在前面加一个0。比如2进制数00001111,应该是转换成0f,但如果直接调用Integer.toHexString(15)的话,返回的结果是f而不是0f。这就是为什么上面if后面要做<0x10的判断了。

  另外一个比较难懂的地方就是rlt[i] & 0xff了。这里的与操作,目的很简单,就是把byte正确的转型为int,因为toHexString(int)方法只能接受int类型的参数。如果我们不做这个与操作,某些情况下转型过后的值就可能不是我们想要的值,比如-1的字节码(补码,Java以补码的形式表示数值)为
1111 1111

  转型为int后的字节码是
1111 1111 1111 1111 1111 1111 1111 1111

  而在这里我们需要的值是
0000 0000 0000 0000 0000 0000 1111 1111

  所以这里用rit[i]和0xff做了一个与运算,就能得到我们想要的值了。
  
1
2
分享到:
评论
1 楼 908311595 2015-02-05  
文章写的很好

相关推荐

    P神-Java安全漫谈

    Java安全是指在Java编程和应用开发过程中采取的一系列措施,旨在保护Java应用程序、系统和数据免受恶意攻击、数据泄露和其他安全威胁的影响。Java安全主要涉及以下几个方面: 代码安全性:Java提供了强大的安全机制...

    Java网络编程案例教程习题参考答案 .pdf

    包括Socket编程、TCP/IP协议、Java Socket类、ServerSocket类、Java网络编程模型、网络编程常见问题、多线程编程、并发编程、Socket选项、网络安全、数据传输、网络协议、Socket超时、网络异常处理等。

    Java网络编程/Java网络编程实例

    7. **网络安全**:Java网络编程也涉及网络安全问题,包括加密(SSL/TLS)、身份验证(证书、数字签名)和授权(访问控制)。Java的JSSE(Java Secure Socket Extension)库提供了这些功能。 8. **多线程处理**:在...

    网络安全MD5算法的java实现

    MD5 jar包是用java编写的一个实现网络安全中的md5散列算法的第三方包。我自己在实习的时候编写的

    JAVA网络安全实现SFTP实例MySFTP.java

    JAVA网络安全实现SFTP实例MySFTP

    基于Java编程提高网络通信安全问题研究.pdf

    本篇研究论文聚焦于Java编程语言在提高网络通信安全方面的作用。...随着网络安全问题的日益凸显,本研究具有重要的理论和实践意义,不仅为网络通信安全提供了新的思路,也为今后的相关研究和应用开发提供了坚实的基础。

    Java 网络程序设计

    通过以上知识点的梳理,我们可以了解到Java网络程序设计的宽度和深度,它包括了从网络协议、通信方式到安全传输、数据库连接和企业级应用等多方面的内容。对于初学者而言,这些知识能够帮助他们建立起网络编程的基础...

    利用java编程实现网络安全通信.pdf

    利用java编程实现网络安全通信.pdf

    纯java 网络硬盘

    综上所述,【纯Java网络硬盘】项目涉及了网络编程、HTTP协议、文件操作、数据库交互、多线程、框架应用、安全机制等多个方面,是一个典型的全栈开发实践。通过深入学习这些知识点,开发者可以构建出高效、稳定且功能...

    Java 前端与后端的网络安全《白帽子讲Web安全》

    阿里巴巴最具价值的安全专家吴翰清的《白帽子讲Web安全》 以思维导图模式概况了本书的最主要内容,值得学习。

    java网络编程第四版pdf

    《Java网络编程(第四版)》是一本深入探讨Java在互联网环境下的编程技术的经典书籍。本书旨在帮助读者理解和掌握如何利用Java语言进行高效、安全的网络通信。书中内容覆盖了从基本的网络概念到复杂的多线程编程,是...

    Java网络编程第三版.pdf

    总之,《Java网络编程第三版》是一本全面介绍Java网络编程的书籍,无论你是初学者还是有经验的开发者,都能从中获取宝贵的知识和实践经验。通过深入学习这本书,你将能够熟练地利用Java进行网络应用的开发,构建高效...

    Java网络编程(第4版)PDF

    《Java网络编程(第4版)》是一本深入探讨Java平台上的网络编程技术的专业书籍,适合想要提升Java通讯技术的学者阅读。此书全面覆盖了Java网络编程的基础和高级概念,帮助开发者理解如何利用Java语言构建高效、可靠的...

    基于Java平台安全性的分析与研究.pdf

    Java之所以在安全性方面受到青睐,一方面是因为Java的编译器输出的不是可执行代码,而是字节码,这为Java平台提供了一定程度的安全性。字节码需要通过Java虚拟机(JVM)在运行时进行解释和执行,这使得Java程序可以...

    java网络编程详解

    在本节中,我们将深入探讨Java网络编程的关键知识点,包括套接字(Socket)编程、多线程、URL处理、网络协议以及网络安全。 首先,我们来了解Java中的套接字编程。套接字是网络通信的基本单元,它提供了进程间的...

    Java网络编程大全

    本资源"Java网络编程大全"显然是一个综合性的学习资料,旨在帮助开发者深入理解并掌握Java在网络编程中的应用。 首先,我们要理解Java网络编程的基础。Java通过Socket类提供了对TCP/IP协议的支持,允许创建客户端和...

    Java网络程序设计

    总之,Java网络程序设计涵盖了广泛的理论知识和技术实践,从基础的Socket通信到复杂的HTTP处理,再到网络安全和高性能的NIO框架,每一个环节都需要深入理解和熟练掌握。通过持续学习和实践,开发者可以构建出强大的...

    《Java网络编程实例:Java网络编程实例》

    本书《Java网络编程实例:Java网络编程实例》显然聚焦于通过实际案例来教授这一核心技能。以下是一些主要的知识点,这些知识点通常会在书中详细讨论: 1. **TCP/IP协议基础**:首先,了解TCP/IP模型和协议栈是非常...

    网络安全-基于Java开发的网络安全Ipv6抓包项目.zip

    这个项目不仅涵盖了基本的网络编程和协议解析,还涉及到网络安全分析和Java编程技巧,对于学习网络安全和Java开发的人员来说,是一个非常有价值的实践案例。通过实际操作,可以提升对网络协议的理解,增强网络安全...

    Java网络编程期末考试复习题库+答案

    Java网络编程是计算机科学中的一个重要领域,特别是在软件开发中,它涉及到如何通过网络进行数据传输和通信。在Java中,网络编程主要依赖于Java的Socket编程、ServerSocket、URL类以及NIO(非阻塞I/O)等核心API。这...

Global site tag (gtag.js) - Google Analytics