欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Java安全性精编版[34页].docx

    • 资源ID:68670080       资源大小:209.11KB        全文页数:34页
    • 资源格式: DOCX        下载积分:19金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要19金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java安全性精编版[34页].docx

    最新资料推荐Java安全性本教程是关于什么方面的?第 1 页(共5 页)恐怕没有什么软件工程主题的重要性比应用程序安全性更紧迫了。无论是来自内部或外部的攻击都会带来巨大损失,某些攻击会使软件公司对造成的损失承担赔偿责任。随着计算机(尤其是因特网)技术的发展,安全性攻击正在变得越来越成熟和频繁。利用各种最新技术和工具是应用程序安全性的一个关键;另一个关键是由经过考验的技术(如数据加密、认证和授权)构筑的牢固的基础。Java 平台的基本语言和库扩展都提供了用于编写安全应用程序的极佳基础。本教程讨论了密码术基础知识与如何用 Java 编程语言实现密码术,并提供了样本代码来说明这些概念。在这个两部分教程的第一部分中,我们讨论库扩展(现在是 JDK 1.4 库的一部分)中的内容,这些库扩展被称为 Java 密码术扩展(Java Cryptography Extension(JCE))和 Java 安全套接字扩展(Java Secure Sockets Extension (JSSE))。此外,本教程还介绍了 CertPath API,这是 JDK 1.4 中新增加的特性。在本教程第二部分(请参阅参考资料)中,我们将把讨论范围扩大到由 Java 平台中 Java 认证和授权服务(Java Authentication and Authorization Service (JAAS))管理的访问控制。我应该学习本教程吗?第 2 页(共5 页)这是一篇中级教程;它假设您知道如何阅读和编写基本的 Java 程序,包括应用程序和 applet。如果您已经是 Java 程序员并且对密码术(关于诸如私钥和公钥加密、RSA、SSL、证书之类的主题)以及支持它们的 Java 库(JCE、JSSE)感到好奇,那么本教程就是为您准备的。本教程不要求您已经具有任何密码术、JCE 或 JSSE 等方面的知识背景。本教程介绍了基本密码构件概念。每个概念都附有 Java 实现考虑事项、代码示例和示例执行的结果。工具、代码样本和安装需求第 3 页(共5 页)您将需要以下几项以完成本教程中的编程练习:· JDK 1.4,标准版 · 本教程源代码和类,以便您能够随着我们的进度理解示例· 用于 RSA 示例的 Bouncy Castle Crypto 库 · 支持 Java 1.4 插件的浏览器 您可以使用 JDK 1.3.x,但必须自行安装 JCE 和 JSSE。关于代码示例的说明第 4 页(共5 页)代码示例直接将已加密的数据显示到屏幕上。大多数情况下,这会产生奇形怪状的控制字符,其中的一些偶尔可能会引起屏幕格式化问题。这不是良好的编程实践(将它们转换成可显示的 ASCII 字符或十进制表示会更好),但我们这样做是为了保持代码示例及其输出的简洁。在示例执行章节的大多数情况下,我们修改了实际字符串以便与本教程中的字符集需求兼容。还有,我们在大多数示例中查询和显示了用于给定算法的实际安全性提供程序库。这样做是为了让用户更好地了解哪个功能是调用哪个库实现的。为什么这样做呢?因为,在大多数安装中都安装了许多这样的提供程序。关于作者第 5 页(共5 页)Brad Rubin 是 Brad Rubin & Associates Inc. 的负责人,该公司是一家专门从事无线网络和 Java 应用程序安全性和教育的计算机安全性咨询公司。Brad 在 IBM(位于明尼苏达州的 Rochester)工作了 14 年,他从 AS/400 的第一个发行版就开始从事其所有方面的硬件和软件开发。他是促使 IBM 转而支持 Java 平台的关键人物,并且是 IBM 最大的 Java 应用程序 称为 SanFrancisco(现在是 WebSphere 的一部分)的商业应用程序框架产品 的首席架构设计师。他还是 Imation Corp. 数据存储部门的首席技术官,以及该公司研发组织的领导。Brad 拥有计算机和电子工程学位,以及威斯康星大学麦迪逊分校计算机科学博士头衔。他目前在明尼苏达大学教授电子和计算机工程高级设计课程,并将于 2002 年秋季开设和教授该大学的计算机安全性课程。可通过 BradRubinBradR 与 Brad 联系。Java安全性编程概念Java 平台是如何使安全编程更方便的第 1 页(共5 页)Java 编程语言和环境有许多特性使安全编程更方便:· 无指针,这意味着 Java 程序不能对地址空间中的任意内存位置寻址。· 字节码验证器,在编译成 .class 文件之后运行,在执行之前检查安全性问题。例如,访问超出数组大小的数组元素的尝试将被拒绝。因为缓冲区溢出攻击是造成大多数系统漏洞的主要原因,所以这是一种重要的安全性特性。· 对资源访问的细颗粒度控制,用于 applet 和应用程序。例如,可以限制 applet 对磁盘空间的读或写,或者可以授权它仅从特定目录读数据。可以根据对代码签名的人(请参阅代码签名的概念)以及代码来源处的 http 地址来进行授权。这些设置都出现在 java.policy 文件中。· 大量库函数,这些函数用于主要密码构件和 SSL(本教程的主题)以及认证和授权(在本系列的第二篇教程中讨论)。此外,有众多的第三方库可用于额外的算法。 什么是安全编程技术?第 2 页(共5 页)简单地说,有多种编程风格和技术可以帮助确保应用程序更安全。考虑下列两个一般示例:· 存储删除密码。如果密码是存储在 Java String 对象中的,则直到对它进行垃圾收集或进程终止之前,密码会一直驻留在内存中。即使进行了垃圾收集,它仍会存在于空闲内存堆中,直到重用该内存空间为止。密码 String 在内存中驻留得越久,遭到窃听的危险性就越大。更糟的是,如果实际内存减少,则操作系统会将这个密码 String 换页调度到磁盘的交换空间,因此容易遭受磁盘块窃听攻击。为了将这种泄密的可能性降至最低(但不是消除),您应该将密码存储在 char 数组中,并在使用后对其置零。(String 是不可变的,所以无法对其置零。)· 智能序列化。当为存储器或传输任何私有字段而序列化对象时,缺省情况下,这些对象都呈现在流中。因此,敏感数据很容易被窃听。可以使用 transient 关键字来标记属性,这样在流中将忽略该属性。 当在本教程中需要用到这些技术以及其它技术时,我们将更详细地讨论它们。JDK 1.4 中集成了安全性第 3 页(共5 页)在 JDK 1.4 之前,许多安全性功能必须作为扩展添加到基本 Java 代码分发版中。严格的美国出口限制要求这种功能的分离。现在,新的宽松法规使安全性特性和基本语言更紧密的集成成为可能。下列软件包(在 1.4 发行版之前作为扩展使用)现在集成到了 JDK 1.4 中:· JCE(Java 密码术扩展) · JSSE(Java 安全套接字扩展) · JAAS(Java 认证和授权服务) JDK 1.4 还引入了两种新功能:· JGSS(Java 通用安全性服务 (Java General Security Service)) · CertPath API(Java 证书路径 API (Java Certification Path API)) JCE、JSSE 和 CertPath API 是本教程讨论的主题。在本系列的下一篇教程中,我们将重点介绍 JAAS。这两篇教程都不讨论 JGSS(它提供一般框架以在两个应用程序之间安全地交换消息)。第三方库充实了安全性第 4 页(共5 页)我们可以用第三方库(也称为提供程序)来增强当前 Java 语言中已经很丰富的功能集。提供程序添加了额外的安全性算法。作为库示例,我们将使用 Bouncy Castle 提供程序(请参阅参考资料)。Bouncy Castle 库提供了其它密码算法,包括本教程什么是公钥密码术?和什么是数字签名?中讨论的流行的 RSA 算法。尽管您的目录名和 java.security 文件可能有一点不同,但仍可用以下模板安装 Bouncy Castle 提供程序。要安装这个库,请下载 bcprov-jdk14-112.jar 文件并将它放到 j2sdk1.4.0jrelibext 和 Program FilesJavaJ2re1.4.0libext 目录中。在两个 java.security 文件(他们位于上述相同的目录下,但位于“security”子目录而不是“ext”)中,将下面的行:security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider添加至这些行的末尾:security.provider.1=sun.security.provider.Sunsecurity.provider.2=.ssl.internal.ssl.Providersecurity.provider.3=com.sun.rsajca.Providersecurity.provider.4=com.sun.crypto.provider.SunJCEsecurity.provider.5=sun.security.jgss.SunProvidersecurity.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider展望第 5 页(共5 页)在本章中,我们已经介绍了 Java 语言提供的有助于确保编程保持安全的特性(无论是完全集成的还是基于扩展的)。我们提供了一些安全编程技术的通用示例以帮助您熟悉这个概念。我们介绍了过去是作为扩展的但现在集成到版本 1.4 发行版中的安全性技术;我们也注意到两种新的安全性技术。我们还说明了了第三方库通过提供新技术能够增强安全性程序。在本教程余下的部分,我们将让您熟悉这些旨在提供安全的消息传递的概念(因为它们应用于 Java 编程):· 消息摘要。这是一种与消息认证码结合使用以确保消息完整性的技术。· 私钥加密。被设计用来确保消息机密性的技术。· 公钥加密。允许通信双方不必事先协商秘钥即可共享秘密消息的技术。· 数字签名。证明另一方的消息确定来自正确通信方的位模式。· 数字证书。通过让第三方认证机构认证消息,向数字签名添加另一级别安全性的技术。· 代码签名。由可信的实体将签名嵌入被传递的代码中的概念。· SSL/TLS。在客户机和服务器之间建立安全通信通道的协议。传输层安全性(Transport Layer Security (TLS))是安全套接字层(Secure Sockets Layer (SSL))的替代品。 当我们讨论上述每个主题时,都将提供示例和样本代码。确保消息的完整性概述第 1 页(共7 页)我们将在本章中了解消息摘要,它获取消息中的数据并生成一个被设计用来表示该消息“指纹”的位块。我们还将讨论 JDK 1.4 支持的与消息摘要相关的算法、类和方法,并为消息摘要和消息认证特性提供代码示例和样本的执行代码。什么是消息摘要?第 2 页(共7 页)消息摘要是一种确保消息完整性的功能。消息摘要获取消息作为输入并生成位块(通常是几百位长),该位块表示消息的指纹。消息中很小的更改(比如说,由闯入者和窃听者造成的更改)将引起指纹发生显著更改。消息摘要函数是单向函数。从消息生成指纹是很简单的事情,但生成与给定指纹匹配的消息却很难。消息摘要可强可弱。校验和(消息的所有字节异或运算的结果)是弱消息摘要函数的一个示例。很容易修改一个字节以生成任何期望的校验和指纹。大多数强函数使用散列法。消息中 1 位更改将引起指纹中巨大的更改(理想的比例是更改指纹中 50% 的位)。算法、类和方法第 3 页(共7 页)JDK 1.4 支持下列消息摘要算法:· MD2 和 MD5,它们都是 128 位算法 · SHA-1 是 160 位算法 · SHA-256、SHA-383 和 SHA-512 提供更长的指纹,大小分别是 256 位、383 位和 512 位 MD5 和 SHA-1 是最常用的算法。MessageDigest 类操作消息摘要。消息摘要代码示例中使用下列方法:· MessageDigest.getInstance("MD5"):创建消息摘要。 · .update(plaintext):用明文字符串计算消息摘要。 · .digest():读取消息摘要。 如果密钥被用作消息摘要生成过程的一部分,则将该算法称为消息认证码。JDK 1.4 支持 HMAC/SHA-1 和 HMAC/MD5 消息认证码算法。Mac 类使用由 KeyGenerator 类产生的密钥操作消息认证码。消息认证码示例中使用了下列方法:· KeyGenerator.getInstance("HmacMD5") 和 .generateKey():生成密钥。· Mac.getInstance("HmacMD5"):创建 MAC 对象。· .init(MD5key):初始化 MAC 对象。· .update(plaintext) 和 .doFinal():用明文字符串计算 MAC 对象。消息摘要代码示例第 4 页(共7 页) import java.security.*;import javax.crypto.*;/ Generate a Message Digestpublic class MessageDigestExample public static void main (String args) throws Exception / / check args and get plaintext if (args.length !=1) System.err.println("Usage: java MessageDigestExample text"); System.exit(1); byte plainText = args0.getBytes("UTF8"); / / get a message digest object using the MD5 algorithm MessageDigest messageDigest = MessageDigest.getInstance("MD5"); / / print out the provider used System.out.println( "n" + messageDigest.getProvider().getInfo() ); / / calculate the digest and print it out messageDigest.update( plainText); System.out.println( "nDigest: " ); System.out.println( new String( messageDigest.digest(), "UTF8") ); 消息摘要样本执行的结果第 5 页(共7 页) D:IBM>java MessageDigestExample "This is a test!"SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; JKS keystore; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores)Digest:D93,.x2%$kd8xdp3di5*消息认证码示例第 6 页(共7 页) import java.security.*;import javax.crypto.*;/ Generate a Message Authentication Codepublic class MessageAuthenticationCodeExample public static void main (String args) throws Exception / / check args and get plaintext if (args.length !=1) System.err.println ("Usage: java MessageAuthenticationCodeExample text"); System.exit(1); byte plainText = args0.getBytes("UTF8"); / / get a key for the HmacMD5 algorithm System.out.println( "nStart generating key" ); KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5"); SecretKey MD5key = keyGen.generateKey(); System.out.println( "Finish generating key" ); / / get a MAC object and update it with the plaintext Mac mac = Mac.getInstance("HmacMD5"); mac.init(MD5key); mac.update(plainText); / / print out the provider used and the MAC System.out.println( "n" + mac.getProvider().getInfo() ); System.out.println( "nMAC: " ); System.out.println( new String( mac.doFinal(), "UTF8") ); 消息认证样本执行第 7 页(共7 页) D:IBM>java MessageAuthenticationCodeExample "This is a test!"Start generating keyFinish generating keySunJCE Provider (implements DES, Triple DES, Blowfish, PBE, Diffie-Hellman,HMAC-MD5, HMAC-SHA1)MAC:Dkdj47x4#.kd#n8a-x>注:因为代码用线程行为定时来生成优质的伪随机数,所以密钥生成很费时。一旦生成了第一个数,其它数的生成就快得多了。还请注意,与消息摘要不同的是,消息认证码使用密码提供程序。(有关提供程序的更多信息,请参阅第三方库充实了安全性。) 保持消息的机密性概述第 1 页(共7 页)在本节中,我们将研究私钥加密的使用并主要讨论诸如密码块、填充、序列密码和密码方式之类的概念。我们将迅速地讨论密码算法、类和方法的细节并用代码示例和样本执行来说明这个概念。什么是私钥密码术?第 2 页(共7 页)消息摘要可以确保消息的完整性,但不能用来确保消息的机密性。要确保机密性,我们需要使用私钥密码术来交换私有消息。Alice 和 Bob 各有一个只有他们两人知道的共享密钥,并且约定使用一种公用密码算法或密码。也就是说,他们保持密钥的私有性。当 Alice 想给 Bob 发送消息时,她加密原始消息(称为明文)以创建密文,然后将密文发送给 Bob。Bob 接收了来自 Alice 的密文并用自己的私钥对它解密,以重新创建原始明文消息。如果窃听者 Eve 侦听该通信,她仅得到密文,因此消息的机密性得以保持。您可以加密单一位或位块(称为块)。块(称为密码块)通常是 64 位大小。如果消息大小不是 64 位的整数倍,那么必须填充短块(关于填充的更多信息请参阅什么是填充?)。单一位加密在硬件实现中更常见。单一位的密码被称为序列密码。私钥加密的强度取决于密码算法和密钥的长度。如果算法比较好,那么攻击它的唯一方法就是使用尝试每个可能密钥的蛮力攻击,它平均要尝试 (1/2)*2*n 次,其中 n 是密钥的位数。在美国出口法规很严时,只允许出口 40 位密钥。这种密钥长度相当弱。美国官方标准(DES 算法)使用 56 位密钥,但随着处理器速度的增加,它变得越来越弱。现在,通常首选 128 位密钥。如果每秒可以尝试一百万个密钥,那么,使用 128 位密钥,找到密钥所需的平均时间是宇宙年龄的许多倍!什么是填充?第 3 页(共7 页)如前所述,如果使用分组密码而消息长度不是块长度的整数倍,那么,必须用字节填充最后一个块以凑成完整的块大小。有许多方法填充块,譬如全用零或一。在本教程中,我们将对私钥加密使用 PKCS5 填充,而对公钥加密使用 PKCS1。使用 PKCS5 时,由一个其值表示剩余字节数的重复字节来填充短块。我们不会在本教程中更深入地讨论填充算法,但您需要了解的信息是,JDK 1.4 支持下列填充技术:· 无填充 · PKCS5 · OAEP · SSL3 BouncyCastle 库(请参阅第三方库充实了安全性和参考资料)支持其它填充技术。方式:确定加密是如何工作的第 4 页(共7 页)可以以各种方式使用给定密码。方式允许您确定加密是如何工作的。例如,您可以允许一个块的加密依赖于前一个块的加密,也可以使块的加密独立于任何其它块的加密。根据您的需求选择方式,并且您必须考虑各方面的权衡(安全性、并行处理能力以及明文和密文的容错等)。方式的选择超出了本教程的讨论范围(请参阅参考资料以进行更深入的阅读),但再次指出,您要了解的信息是,Java 平台支持下列方法:· ECB(电子密码本 (Electronic Code Book)) · CBC(密码块链接 (Cipher Block Chaining)) · CFB(密码反馈方式 (Cipher Feedback Mode)) · OFB(输出反馈方式 (Output Feedback Mode)) · PCBC(填充密码块链接 (Propagating Cipher Block Chaining)) 算法、类和方法第 5 页(共7 页)JDK 1.4 支持下列私钥算法:· DES。DES(数据加密标准)是由 IBM 于上世纪 70 年代发明的,美国政府将其采纳为标准。它是一种 56 位分组密码。· TripleDES。该算法被用来解决使用 DES 技术的 56 位时密钥日益减弱的强度,其方法是:使用两个密钥对明文运行 DES 算法三次,从而得到 112 位有效密钥强度。TripleDES 有时称为 DESede(表示加密、解密和加密这三个阶段)。· AES。AES(高级加密标准)取代 DES 成为美国标准。它是由 Joan Daemen 和 Vincent Rijmen 发明的,也被称为 Rinjdael 算法。它是 128 位分组密码,密钥长度为 128 位、192 位或 256 位。· RC2、RC4、和 RC5。这些算法来自领先的加密安全性公司 RSA Security。· Blowfish。这种算法是由 Bruce Schneier 开发的,它是一种具有从 32 位到 448 位(都是 8 的整数倍)可变密钥长度的分组密码,被设计用于在软件中有效实现微处理器。· PBE。PBE(基于密码的加密)可以与多种消息摘要和私钥算法结合使用。 Cipher 类使用由 KeyGenerator 类产生的密钥操作私钥算法。私钥密码术代码示例中使用了下列方法:· KeyGenerator.getInstance("DES")、.init(56) 和 .generateKey():生成密钥。· Cipher.getInstance("DES/ECB/PKCS5Padding"):创建 Cipher 对象(确定算法、方式和填充)。· .init(Cipher.ENCRYPT_MODE, key):初始化 Cipher 对象。· .doFinal(plainText):用明文字符串计算密文。· .init(Cipher.DECRYPT_MODE, key):解密密文。· .doFinal(cipherText):计算密文。 私钥密码术代码示例第 6 页(共7 页) import java.security.*;import javax.crypto.*;/ encrypt and decrypt using the DES private key algorithmpublic class PrivateExample public static void main (String args) throws Exception / / check args and get plaintext if (args.length !=1) System.err.println("Usage: java PrivateExample text"); System.exit(1); byte plainText = args0.getBytes("UTF8"); / / get a DES private key System.out.println( "nStart generating DES key" ); KeyGenerator keyGen = KeyGenerator.getInstance("DES"); keyGen.init(56); Key key = keyGen.generateKey(); System.out.println( "Finish generating DES key" ); / / get a DES cipher object and print the provider Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); System.out.println( "n" + cipher.getProvider().getInfo() ); / / encrypt using the key and the plaintext System.out.println( "nStart encryption" ); cipher.init(Cipher.ENCRYPT_MODE, key); byte cipherText = cipher.doFinal(plainText); System.out.println( "Finish encryption: " ); System.out.println( new String(cipherText, "UTF8") ); / / decrypt the ciphertext using the same key System.out.println( "nStart decryption" ); cipher.init(Cipher.DECRYPT_MODE, key); byte newPlainText = cipher.doFinal(cipherText); System.out.println( "Finish decryption: " ); System.out.println( new String(newPlainText, "UTF8") ); 私钥密码术样本执行第 7 页(共7 页) D:IBM>java PrivateExample "This is a test!"Start generating DES keyFinish generating DES keySunJCE Provider (implements DES, Triple DES, Blowfish, PBE, Diffie-Hellman,HMAC-MD5, HMAC-SHA1)Start encryptionFinish encryption:Kdkj4338*3n1#kxkgtixo4Start decryptionFinish decryption:This is a test!用公钥保密消息概述第 1 页(共5 页)在本章中,我们将研究公钥密码术,该特性解决在事先没有约定密钥的通信双方之间加密消息的问题。我们将简单地浏览一下支持公钥功能的算法、类和方法,并提供代码样本和执行来说明该概念。什么是公钥密码术?第 2 页(共5 页)私钥密码术受到一个主要缺点的困扰:一开始怎样将私钥交给 Alice 和 Bob 呢?如果 Alice 生成了私钥,则必须将它发送给 Bob,但私钥是敏感信息,所以应该加密。但是,还没有交换密钥来执行加密。公钥密码术是上世纪 70 年代发明的,它解决在没有事先约定密钥的通信双方之间加密消息的问题。在公钥密码术中,Alice 和 Bob 不仅有不同的密钥,而且每人有两个密钥。一个是私有的,不应与任何人共享。另一个是公共的,可以与任何人共享。当 Alice 想给 Bob 发送安全消息时,她用 Bob 的公钥加密消息并将结果发送给 Bob。Bob 使用他的私钥解密消息。当 Bob 想给 Alice 发送安全消息时,他用 Alice 的公钥加密消息并将结果发送给 Alice。Alice 使用她的私钥解密消息。Eve 可以窃听公钥和已加密的消息,但她不能解密消息,因为她没有任何一个私钥。公钥和私钥是成对生成的,并需要比同等强度的私钥加密密钥更长。RSA 算法的典型密钥长度是 1,024 位。从该密钥对的一个成员派生出另一个是不可行的。公钥加密比较慢(比私钥加密慢 100 到 1,000 倍),因此实际上通常使用混合技术。公钥加密被用于向对方分发称为会话密钥的私钥,使用该私有会话密钥的私钥加密被用于进行大量的消息加密。算法、类和方法第 3 页(共5 页)公钥加密中使用下列两种算法:· RSA。这个算法是最流行的公钥密码,但 JDK 1.4 中不支持它。您必须使用类似于 BouncyCastle 的第三方库来获得这种支持。· Diffie-Hellman。技术上将这种算法称为密钥协定算法。它不能用于加密,但可以用来允许双方通过在公用通道上共享信息来派生出秘钥。然后这个密钥可以用于私钥加密。Cipher 类使用由 KeyPairGenerator 类产生的密钥来操作公钥算法。公钥密码术代码示例示例中使用了下列方法:· KeyPairGenerator.getInstance("RSA")、.initialize(1024) 和 .generateKeyPair():生成密钥对。· Cipher.getInstance("RSA/ECB/PKCS1Padding") 创建 Cipher 对象(确定算法、方式和填充)。· .init(Cipher.ENCRYPT_MODE, key.getPublic():初始化 Cipher 对象。· .doFinal(plainText):用明文字符串计算密文。· .init(Cipher.DECRYPT_MODE, key.getPrivate() 和 .doFinal(cipherText):解密密文。 公钥密码术代码示例第 4 页(共5 页) import java.security.*;import javax.crypto.*;/ Public Key cryptography using the RSA algorithm.public class PublicExample public static void main (String args) throws Exception / / check args and get plaintext if (args.length !=1) System.err.println("Usage: java PublicExample text"); System.exit(1); byte plainText = args0.getBytes("UTF8"); / / generate an RSA key System.out.println( "nStart generating RSA key" ); KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(1024); KeyPair key = keyGen.generateKeyPair(); System.out.println( "Finish generating RSA key" ); / / get an RSA cipher object and print the provider Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); System.out.println( "n" + ci

    注意事项

    本文(Java安全性精编版[34页].docx)为本站会员(yan****nan)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开