`
高级java工程师
  • 浏览: 409166 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java对字符串加密

阅读更多
1.引言
在实际工作中我们常常会遇到对数据进行加密解密的工作(如对密码数据的保护或者对网络传输的数据进行保护),因为数据加密解密需要非常复杂、高效的算法,所以通常对于一般的程序员是无法完成的工作,即使对于一些公开的加密算法进行编程都是一件非常艰巨的任务(少数智商及高的程序员除外)。幸运的是现在有很多加解密算法有现成的API,我们只要了解一些加解密的工作原理,能够使用一些加解密API来完成数据保护的工作就可以了。
2.密码学简介
密码学主要包括密码编码学(加密)和密码分析学(解密)。
2.1密码学的几个主要作用:
A. Confidentiality
机密行,对数据进行保护;
B. Authentication
鉴别性,确定收到消息的接收人是数据应该正确送达的人,入侵者不能进行伪装;
C. Integrity
完整行,消息的接受者能够判断出接收的数据是否正确,是否在传输过程中遭到篡改;
D. No repudiation
抵赖性,发送数据的人不能在事后不承认自己发过的数据。
2.2数据加解密模型
加解密算法分为两种:受限制的安全算法和非受限的安全算法。受限制的安全算法出现的比较早,最初用于军方,对一些机密的数据进行加密,由于这种安全算法算法保密,所以使用率低,而且实际加密效果并不理想。非受限安全算法是一些公开的算法,使用率高,这些算法都是基于密钥的算法,现在我们主要使用的主要是这种算法。
下面就是一个数据加解密的模型。

―――加密密钥―――解密密钥――――
         |               |
明文->加密->密文->解密->原始明文
数据通过加密密钥进行加密,在解密的时候必须通过相应的解密密钥才能得到原始明文。
2.3数据加密的常用算法
目前常用的加密算法包括对称密钥加密算法,公开密钥加密算法等等。对称密钥加密算法包括:DES,IDEA,3DES等。公开密钥加密算法包括RSA,ECC等。
2.4 DES算法简介
DES即分组加密算法,明文密文都使用64位数据分组;采用对称算法,加密和解密算法相同,但是使用的密钥不同,密钥使用56位数;由于算法只使用了简单的数据逻辑和算术运算,所以实现起来相对简单。本文就使用DES算法来给出一个加解密工具类。
3.java 实现的对字符串加解密工具类

import java.io.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.*;
import java.security.spec.*;
import com.sun.crypto.provider.SunJCE;
import java.io.Serializable;

/**
 * 提供加密算法,可以对输入的字符串进行加密、解密操作
*/
public class EncryptData
{
     byte[] encryptKey;
     DESedeKeySpec spec;
     SecretKeyFactory keyFactory;
     SecretKey theKey;
     Cipher cipher;
     IvParameterSpec IvParameters;

     public   EncryptData()
     {
         try
         {
             // 检测是否有 TripleDES 加密的供应程序
             // 如无,明确地安装SunJCE 供应程序
             try{ Cipher c = Cipher.getInstance("DESede"); }
             catch (Exception e)
             {
                 System.err.println("Installling SunJCE provider.");
                 Provider sunjce = new com.sun.crypto.provider.SunJCE();
                 Security.addProvider(sunjce);
             }
             // 创建一个密钥
             encryptKey = "This is a test DESede Key".getBytes();

             // 为上一密钥创建一个指定的 DESSede key
             spec = new DESedeKeySpec(encryptKey);

             // 得到 DESSede keys
             keyFactory = SecretKeyFactory.getInstance("DESede");

             // 生成一个 DESede 密钥对象
             theKey = keyFactory.generateSecret(spec);

             // 创建一个 DESede 密码
             cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");

             // 为 CBC 模式创建一个用于初始化的 vector 对象
             IvParameters =
                     new IvParameterSpec(new byte[]{12,34,56,78,90,87,65,43} );
         }
         catch (Exception exc)
         {
             // 记录加密或解密操作错误
         }
     }

     /**
      * 加密算法
      * @param password   等待加密的密码
      * @return           加密以后的密码
      * @throws Exception
      */
     public byte[] encrypt(String password)
     {
         String encrypted_password = null;
         byte[] encrypted_pwd = null;

         try
         {
             // 以加密模式初始化密钥
             cipher.init(Cipher.ENCRYPT_MODE,theKey,IvParameters);

             // 加密前的密码(旧)
             byte[] plainttext = password.getBytes();

             // 加密密码
             encrypted_pwd = cipher.doFinal(plainttext);

             // 转成字符串,得到加密后的密码(新)
             encrypted_password = new String(encrypted_pwd);
         }
         catch(Exception ex)
         {
             // 记录加密错误
         }
         return encrypted_pwd;
     }

     /**
      * 解密算法
      * @param password   加过密的密码
      * @return           解密后的密码
      */
     public String decrypt(byte[] password)
     {
         String decrypted_password = null;
         try
         {
             // 以解密模式初始化密钥
             cipher.init(Cipher.DECRYPT_MODE,theKey,IvParameters);

             // 构造解密前的密码
             byte[] decryptedPassword = password;

             // 解密密码
             byte[] decrypted_pwd = cipher.doFinal(decryptedPassword);
             // 得到结果
             decrypted_password = new String(decrypted_pwd);
         }
         catch(Exception ex)
         {
             // 记录解密错误
         }
         return decrypted_password;
     }
}



分享到:
评论

相关推荐

    Java对字符串加密解密

    DES(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密...

    java对字符串加密常用的两种方式BASE64和DES

    java对字符串加密常用的两种方式BASE64和DES,值得一看呵呵!

    java 字符串的加密

    在Java编程语言中,字符串加密是一项重要的安全技术,它用于保护数据的隐私和安全性。字符串加密通常涉及到将明文字符串转换成密文,这样未经授权的用户就无法理解数据的原始含义。下面我们将深入探讨Java中字符串...

    JAVA可逆带秘钥字符串加密算法

    总结来说,`JAVA可逆带秘钥字符串加密算法`主要涉及到对称加密,特别是DES算法,用于对字符串进行安全保护。通过`DESUtil.java`这样的工具类,开发者可以方便地在Java程序中集成加密和解密功能,确保数据在传输和...

    使用java自带des加密算法实现文件加密和字符串加密

    主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下

    java 字符串加密解密

    在IT行业中,字符串加密解密是信息安全领域的重要组成部分,它涉及到数据保护、用户隐私和网络安全。本项目提供了四种常见的加密解密算法的Java实现:BASE64、AES、DES和MD5。接下来,我们将深入探讨这四种算法及其...

    Java对字符串进行加密解密

    Java字符串加密解密是指使用Java语言对字符串进行加密和解密操作的过程。在这个过程中,我们可以使用异或运算符来对字符串进行加密和解密。下面我们将详细介绍Java字符串加密解密的实现过程和原理。 实现过程: ...

    用Java编写的一个字符串加密程序

    这是一个用Java编写的简易字符串加密文件,可以对你输入的任何字符串实现加密解密功能

    Java字符串加密实例

    总之,Java中的字符串加密涉及到多种哈希和加密算法,它们各有优缺点。开发者应根据需求选择合适的算法,并遵循最佳实践,如使用加盐的哈希、强密钥管理和定期更新加密策略,以提高系统的安全性。

    PB字符串加密、解密函数

    在这个背景下,PB字符串加密和解密函数是开发人员常用的技术手段,用于对敏感信息进行编码,防止未经授权的访问或窃取。 在PowerBuilder中,我们可以利用内置的函数或者自定义的函数来实现字符串的加密和解密。通常...

    字符串加密pta:分别基于Java和Python的实现代码.zip

    字符串加密pta:分别基于Java和Python的实现代码.zip 字符串加密pta:分别基于Java和Python的实现代码.zip 字符串加密pta:分别基于Java和Python的实现代码.zip 字符串加密pta:分别基于Java和Python的实现代码.zip ...

    基于 Java 实现的字符串加密插件【字符串加密】

    【作品名称】:基于 Java 实现的字符串加密插件【字符串加密】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于 ...

    java字符串加密解密

    总的来说,Java字符串加密解密涉及到多个层面的知识,包括加密算法、密钥管理、安全协议等。理解和熟练掌握这些技术对于保障网络安全至关重要。在实际开发中,还需要关注加密算法的版本限制、密钥的安全存储以及法律...

    字符串加密vb

    在IT领域,字符串加密是一种常见的安全措施,用于保护数据的隐私和安全性。VB(Visual Basic)作为Microsoft开发的一种编程语言,提供了多种方法来实现字符串的加密。本篇将深入探讨字符串加密的基本概念、简单加密...

    Java Md5字符串加密类分享.rar

    Java Md5字符串加密类代码分享,MD5是一个比较常见的字符串加密算法,在JAVA中应用也相当普遍,这个MD5算法类或许可以直接套用,代码中的关键部分带有注释 ,...需要使用MD5对字符串加密的,那就下载这个JAVA函数库吧。

    java-encrypt-string:通过 PGP 进行 Java 字符串加密

    mike.baranski gmail - blog.mikeski.net web 展示了如何生成公钥/私钥对、将其保存到文件以及加密/解密字符串。 请注意,/tmp 的文件路径是硬编码的。 有关其工作原理的示例,请参阅单元测试。

    运用DES 对不限长度的字符串加密!

    运用DES 对不限长度的字符串加密!

    字符串加密解密

    8. **字符串加密解密案例**:在提供的压缩包文件“字符串加密解密案例”中,可能包含具体的编程实现,如Python的cryptography库、Java的Cipher类或者JavaScript的crypto模块等,展示了如何在实际项目中应用上述理论...

    java_code.rar_java 加密解密_java_code.rar_加密解密_字符串 加密 解密_对 字符串 加密 解密

    总结来说,这个“java_code.rar”项目展示了Java中基于随机数和按位运算的字符串加密解密方法,对于学习和理解Java加密技术,特别是对字符串的处理,具有很好的参考价值。通过深入研究提供的代码,我们可以学习如何...

    Java字符串加密使用的一个jar包 commons-lang3-3.1.jar下载

    Java字符串加密使用到的一个jar包 commons-lang3-3.1.jar下载 jar包含具体的类有 org.apache.commons.lang3.StringUtils org.apache.commons.lang3.ArrayUtils.class org.apache.commons.lang3.BitField.class org....

Global site tag (gtag.js) - Google Analytics