`
huazx123
  • 浏览: 24828 次
文章分类
社区版块
存档分类
最新评论

实现java和C#相互加密与解密 并能保持解密出来一致

 
阅读更多

实现java和C#相互加密与解密 并能保持解密出来一致

 


方法一:

java:

  

 

import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;


/**
 *
 * @author Administrator
 */

public class CryptoTools {
   // DES加密的私钥,必须是8位长的字符串
    private static final byte[] DESkey = "11111111".getBytes();// 设置密钥

 private static final byte[] DESIV = "12345678".getBytes();// 设置向量

 static AlgorithmParameterSpec iv = null;// 加密算法的参数接口,IvParameterSpec是它的一个实现
 private static Key key = null;

 public CryptoTools() throws Exception {
  DESKeySpec keySpec = new DESKeySpec(DESkey);// 设置密钥参数
  iv = new IvParameterSpec(DESIV);// 设置向量
  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");// 获得密钥工厂
  key = keyFactory.generateSecret(keySpec);// 得到密钥对象

 }

 public String encode(String data) throws Exception {
  Cipher enCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");// 得到加密对象Cipher
  enCipher.init(Cipher.ENCRYPT_MODE, key, iv);// 设置工作模式为加密模式,给出密钥和向量
  byte[] pasByte = enCipher.doFinal(data.getBytes("utf-8"));
  BASE64Encoder base64Encoder = new BASE64Encoder();
  return base64Encoder.encode(pasByte);
 }

 public String decode(String data) throws Exception {
  Cipher deCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
  deCipher.init(Cipher.DECRYPT_MODE, key, iv);
  BASE64Decoder base64Decoder = new BASE64Decoder();
  byte[] pasByte = deCipher.doFinal(base64Decoder.decodeBuffer(data));
  return new String(pasByte, "UTF-8");
 }
}

 

//测试
 public static void main(String[] args) throws Exception {

  CryptoTools tools = new CryptoTools();
  System.out.println("加密:" + tools.encode("天下"));
  System.out.println("解密:" + tools.decode(tools.encode("天下")));
 }

}

 

 

 

 

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

 

 

 

 

 

方法二:

C#:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

 
using System.Configuration;  
using System.Web;  
using System.Security.Cryptography;  
using System.IO;  
 

namespace DES
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

 

          public static string DES_Key = "11111111"; 
 
         #region DESEnCode DES加密
        public static string DESEnCode(string pToEncrypt, string sKey)
        {
            // string pToEncrypt1 = HttpContext.Current.Server.UrlEncode(pToEncrypt);  
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(pToEncrypt);

            //建立加密对象的密钥和偏移量   
            //原文使用ASCIIEncoding.ASCII方法的GetBytes方法   
            //使得输入密码必须输入英文文本   
            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            des.IV = ASCIIEncoding.ASCII.GetBytes("12345678");
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);

            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();


            return Convert.ToBase64String(ms.ToArray());
        }
        #endregion

        #region DESDeCode DES解密
        /// <summary>
        /// 对DES加密后的字符串进行解密
        /// </summary>
        /// <param name="encryptedString">待解密的字符串</param>
        /// <returns>解密后的字符串</returns>
        public string DESDeCode(string encryptedString, string sKey)
        {
            byte[] btKey = Encoding.Default.GetBytes(sKey);
            byte[] btIV = Encoding.Default.GetBytes("12345678");
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();

            using (MemoryStream ms = new MemoryStream())
            {
                byte[] inData = Convert.FromBase64String(encryptedString);
                try
                {
                    using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
                    {
                        cs.Write(inData, 0, inData.Length);
                        cs.FlushFinalBlock();
                    }

                    return Encoding.UTF8.GetString(ms.ToArray());
                }
                catch
                {
                    throw;
                }
            }
        }

        #endregion  


//测试
        private void button1_Click(object sender, EventArgs e)
        {
            string jiami = textBox1.Text;
           textBox2.Text= DESEnCode(jiami, "11111111");
        }
    private void button2_Click(object sender, EventArgs e)
    {
        string jiemi = textBox2.Text;
        textBox3.Text = DESDeCode(jiemi,"11111111");
    }
 
 
    }
}

 

分享到:
评论

相关推荐

    C#RSA加密与JAVA解密,实现相互通信

    "C# RSA加密与JAVA解密,实现相互通信"的主题聚焦于如何利用RSA公钥/私钥加密算法在C#和Java两个不同的编程环境中实现安全的数据交换。RSA是一种非对称加密算法,它使用一对密钥——公钥和私钥,公钥用于加密,私钥...

    RSA加密算法实现以及C#与java互通加解密

    为了实现C#与Java之间的互通加解密,需要确保两边使用的RSA算法实现一致,包括密钥生成、填充算法及加密解密的具体实现。 - **密钥一致性**:确保C#与Java生成的公私钥对相同。 - **填充算法一致性**:两边都应采用...

    C#和Java实现互通的RSA&DES加解密算法

    要实现C#和Java之间的互通,关键在于双方的加密和解密过程必须保持一致。例如,对于RSA,你需要确保公钥和私钥的生成、编码和解码方式相同。在C#中,通常使用Base64编码存储密钥,而在Java中也应做同样的处理。DES则...

    C++/java/C#语言的AES加密解密

    标题中的"C++/java/C#语言的AES加密解密"涉及到的是三种常用编程语言——C++、Java和C#在实现AES(Advanced Encryption Standard,高级加密标准)算法上的应用。AES是一种广泛使用的对称加密算法,它在信息安全领域...

    RSA算法JAVA公钥加密,C#私钥解密

    RSA算法是一种非对称加密技术,它在信息安全领域扮演着重要的角色。非对称加密与对称加密的主要区别在于,它使用两个不同的密钥:一个...开发者可以通过运行这些示例代码,理解并应用RSA加密解密技术到自己的项目中。

    DES加密方法JAVA和C#交叉加密解密代码

    DES加密方法JAVA和C#交叉加密解密代码

    C# RSA加密解密

    本篇文章将深入探讨C#如何实现RSA加密解密,并结合Winform界面进行演示。 **1. RSA算法基础** RSA算法基于数论原理,包括大数因子分解的困难性。它包含两个密钥:公钥和私钥。公钥可以公开,用于加密;私钥必须...

    C#与java平台RSA加密解密签名验签互通案例

    本案例聚焦于"C#与Java平台RSA加密解密签名验签互通"的问题,这涉及到两个主要的技术点:RSA加密算法和跨平台兼容性。下面将详细阐述这两个知识点。 首先,RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和...

    AES java 与 C#加密解密

    在IT领域,加密和解密是确保数据安全的重要手段,特别是在跨平台的环境中,如Java和C#之间进行数据交换时。AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法,适用于保护敏感...

    C# 实现与JAVA互通 加签/验签,RSA加密/解密

    * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥...

    C#实现AES加密解密算法

    ### C# 实现 AES 加密解密算法 #### 概述 在计算机科学与信息安全领域,数据加密技术是一项至关重要的技术。AES(Advanced Encryption Standard,高级加密标准)是一种广泛使用的对称加密算法,用于保护敏感数据的...

    java和C#通用des3加解密

    标题中的“java和C#通用des3加解密”指的是在Java和C#这两种不同的编程语言中实现DES(Data Encryption Standard)的加强版——3DES(Triple DES)加解密算法。3DES是一种广泛使用的对称加密算法,通过三次应用DES的...

    C#加密和解密

    C#加密和解密C#加密和解密C#加密和解密C#加密和解密

    C#的几种加密和解密的方法

    在C#编程语言中,加密和解密是安全领域中的重要概念,用于保护数据免受未经授权的访问。本文将深入探讨几种常见的加密和解密方法,包括Base64、MD5、SHA1以及文件夹的加密和解密。 首先,让我们从Base64加密和解密...

    C# .net版 RSA 公钥加密私钥解密 私钥加密公钥解密

    本教程主要讲解如何在C# .NET环境中使用RSA进行公钥加密和私钥解密,以及私钥加密和公钥解密的操作。 首先,让我们了解RSA的基本原理。RSA算法基于两个大素数的乘积,这个乘积作为公钥,而这两个大素数作为私钥。...

    C#实现文件加密解密工具(AES算法)

    本篇将深入探讨如何利用C#和AES(高级加密标准)算法来创建一个文件加密解密工具。 AES是一种对称加密算法,广泛应用于数据保护,因为它既高效又安全。它的基本工作原理是通过一系列复杂的数学运算(如置换、混淆等...

    AES加密,解密 C# 生成JAVA 256长度密钥加密

    总结,通过C#生成256位AES密钥并使用相同的密钥和IV在Java中进行加密和解密,可以在两个平台间实现安全的数据交换。务必确保在两个环境中使用一致的加密模式、填充方式和IV,以确保跨平台的兼容性。在实际项目中,还...

    C#RSA私钥加密公钥解密

    总的来说,这个项目展示了如何在C#中使用`System.Numerics.BigInteger`实现RSA加密算法,同时提供了私钥加密和公钥解密的功能,确保了数据的安全性。为了实际应用,你需要理解并掌握RSA算法的原理,以及如何在.NET...

    C#文件加密解密(完整项目)

    本项目"文件加密解密(完整项目)"专注于利用C#进行文件的安全处理,确保数据在传输和存储时的隐私性。 一、C#加密技术基础 C#中实现文件加密主要依赖于.NET Framework提供的加密类库,如System.Security....

    C# 10种加密解密方式

    以下是对标题和描述中提及的10种C#加密解密方式的详细解释: 1. **MD5加密**:MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它将任意长度的数据转化为固定长度的摘要。虽然MD5已经不被认为安全用于...

Global site tag (gtag.js) - Google Analytics