.Net 常用加密算法类

Spring Boot 进阶-Spring Boot如何整合AOP实现自定义注解 首先什么是AOP?AOP即面向切面编程,是在Spring 中提供的核心功能之一,其主要的目的是实现对业务功能的横向扩展操作,从而达到低耦合的效果。在后台应用开发的过程中,一个比较经典的使用就是在我们的业务系统中进行日志记录功能。日志操作功能在应用中算是辅助性的功能,不需要一遍一遍的重新开发,所以我们需要完成的操作就是通过AOP技术来实现日志切面,AOP操作可以在不改变任何逻辑的基础上实现对应用的基础功能进行扩展的操作。第一步、需要引入AOP框架使用的场景启动器依赖,代码如下 阅读详情
Net框架由于拥有CLR提供的丰富库支持,只需很少的代码即可实现先前使用C等旧式语言很难实现的加密算法。本类实现一些常用机密算法,供参考。其中MD5算法返回Int的ToString字串。

using System;
using System.IO;
using System.Data;
using System.Text;
using System.Diagnostics;
using System.Security;
using System.Security.Cryptography;

namespace com.Quickline.Encrypt
{
 /// <summary>
 /// 类名:HashEncrypt
 /// 作用:对传入的字符串进行Hash运算,返回通过Hash算法加密过的字串。
 /// 属性:[无]
 /// 构造函数额参数:
 /// IsReturnNum:是否返回为加密后字符的Byte代码
 /// IsCaseSensitive:是否区分大小写。
 /// 方法:此类提供MD5,SHA1,SHA256,SHA512等四种算法,加密字串的长
度依次增大。
 /// </summary>
 public class HashEncrypt
 {
  //private string strIN;
  private bool isReturnNum;
  private bool isCaseSensitive;
  
  public HashEncrypt(bool IsCaseSensitive,bool IsReturnNum)
  {
   this.isReturnNum = IsReturnNum;
   this.isCaseSensitive = IsCaseSensitive;
  }
  
  
  private string getstrIN(string strIN)
  {
   //string strIN = strIN;
   if (strIN.Length == 0)
   {
    strIN = "~NULL~";
   }
   if (isCaseSensitive == false)
   {
    strIN = strIN.ToUpper();
   }
   return strIN;
  }
  public string MD5Encrypt(string strIN)
  {
   //string strIN = getstrIN(strIN);
   byte[] tmpByte;
   MD5 md5 = new MD5CryptoServiceProvider();
   tmpByte =
md5.ComputeHash(GetKeyByteArray(getstrIN(strIN)));
   md5.Clear();

   return GetStringValue(tmpByte);

  }
  
  public string SHA1Encrypt(string strIN)
  {
   //string strIN = getstrIN(strIN);
   byte[] tmpByte;
   SHA1 sha1 = new SHA1CryptoServiceProvider();

   tmpByte = sha1.ComputeHash(GetKeyByteArray(strIN));
   sha1.Clear();

   return GetStringValue(tmpByte);

  }

  public string SHA256Encrypt(string strIN)
  {
   //string strIN = getstrIN(strIN);
   byte[] tmpByte;
   SHA256 sha256 = new SHA256Managed();

   tmpByte =
sha256.ComputeHash(GetKeyByteArray(strIN));
   sha256.Clear();

   return GetStringValue(tmpByte);

  }

  public string SHA512Encrypt(string strIN)
  {
   //string strIN = getstrIN(strIN);
   byte[] tmpByte;
   SHA512 sha512 = new SHA512Managed();

   tmpByte =
sha512.ComputeHash(GetKeyByteArray(strIN));
   sha512.Clear();

   return GetStringValue(tmpByte);

  }
  
  /// <summary>
  /// 使用DES加密(Added by niehl 2005-4-6)
  /// </summary>
  /// <param name="originalValue">待加密的字符串</param>
  /// <param name="key">密钥(最大长度8)</param>
  /// <param name="IV">初始化向量(最大长度8)</param>
  /// <returns>加密后的字符串</returns>
  public string DESEncrypt(string originalValue,string key,string IV)
  {
   //将key和IV处理成8个字符
   key += "12345678";
   IV += "12345678";
   key = key.Substring(0,8);
   IV = IV.Substring(0,8);

   SymmetricAlgorithm sa;
   ICryptoTransform ct;
   MemoryStream ms;
   CryptoStream cs;
   byte[] byt;

   sa = new DESCryptoServiceProvider();
   sa.Key = Encoding.UTF8.GetBytes(key);
   sa.IV = Encoding.UTF8.GetBytes(IV);
   ct = sa.CreateEncryptor();

   byt = Encoding.UTF8.GetBytes(originalValue);

   ms = new MemoryStream();
   cs = new CryptoStream(ms, ct,
CryptoStreamMode.Write);
   cs.Write(byt, 0, byt.Length);
   cs.FlushFinalBlock();

   cs.Close();

   return Convert.ToBase64String(ms.ToArray());

  }

  public string DESEncrypt(string originalValue,string key)
  {
   return DESEncrypt(originalValue,key,key);
  }

  /// <summary>
  /// 使用DES解密(Added by niehl 2005-4-6)
  /// </summary>
  /// <param name="encryptedValue">待解密的字符串</param>
  /// <param name="key">密钥(最大长度8)</param>
  /// <param name="IV">m初始化向量(最大长度8)</param>
  /// <returns>解密后的字符串</returns>
  public string DESDecrypt(string encryptedValue,string key,string IV)
  {
   //将key和IV处理成8个字符
   key += "12345678";
   IV += "12345678";
   key = key.Substring(0,8);
   IV = IV.Substring(0,8);

   SymmetricAlgorithm sa;
   ICryptoTransform ct;
   MemoryStream ms;
   CryptoStream cs;
   byte[] byt;

   sa = new DESCryptoServiceProvider();
   sa.Key = Encoding.UTF8.GetBytes(key);
   sa.IV = Encoding.UTF8.GetBytes(IV);
   ct = sa.CreateDecryptor();

   byt = Convert.FromBase64String(encryptedValue);

   ms = new MemoryStream();
   cs = new CryptoStream(ms, ct,
CryptoStreamMode.Write);
   cs.Write(byt, 0, byt.Length);
   cs.FlushFinalBlock();

   cs.Close();

   return Encoding.UTF8.GetString(ms.ToArray());

  }

  public string DESDecrypt(string encryptedValue,string key)
  {
   return DESDecrypt(encryptedValue,key,key);
  }

  private string GetStringValue(byte[] Byte)
  {
   string tmpString = "";

   if (this.isReturnNum == false)
   {
    ASCIIEncoding Asc = new ASCIIEncoding();
    tmpString = Asc.GetString(Byte);
   }
   else
   {
    int iCounter;

    for
(iCounter=0;iCounter<Byte.Length;iCounter++)
    {
     tmpString = tmpString +
Byte[iCounter].ToString();
    }
    
   }
   
   return tmpString;
  }

  private byte[] GetKeyByteArray(string strKey)
  {

   ASCIIEncoding Asc = new ASCIIEncoding();
   
   int tmpStrLen = strKey.Length;
   byte[] tmpByte = new byte[tmpStrLen-1];

   tmpByte = Asc.GetBytes(strKey);

   return tmpByte;

  }

 }
}

spring boot中使用切面注解 完成一个spring boot切面对参数加密解密的操作 引入依赖: 切面依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId&g... 阅读详情

相关推荐

自定义注解+切面方式实现重新构建接口入参

在需要切面的接口上使用自定义注解标记。

qq_35201802的博客 1037

C#,.NET常见算法

【代码】C#,.NET常见算法。

房东的猫的博客 1366

Spring Boot 使用AOP切面实现后台日志管理模块

设计原则和思路: 元注解方式结合AOP,灵活记录操作日志 能够记录详细错误日志为运维提供支持 日志记录尽可能减少性能影响 1.定义日志记录元注解 2.定义用于记录日志的实体类 import java.io.Serializable; import com.leon.common.util.StringUtils; import com.fasterxml.jackson.ann...

xiao雷博客 2万+

数据加密算法

目前企业面临的计算环境和过去有很大的变化,许多数据资源能够依靠网络来远程存取,而且越来越多的通讯依赖于公共网络公共网络(如 Internet),而这些环境并不保证实体间的安全通信,数据在传输过程可能被其它人读取或篡改。加密将防止数据被查看或修改,并在原本不安全的信道上提供安全的通信信道,它达到以下目的:保密性:防止用户的标识或数据被读取。 数据完整性:防止数据被更改。 身份验证

dajidali的专栏 2188

Spring Boot 切面执行优先级配置指南

在环绕通知(@Around)中,高优先级切面的通知方法先进入,后退出;而在前置通知(@Before)中,高优先级切面的通知方法先执行,后置通知(@After)和返回后通知(@AfterReturning)以及异常通知(@AfterThrowing)则相反,低优先级切面的通知方法先执行。在 Spring Boot 应用开发中,切面编程(AOP)是一项强大的功能,它允许我们将横切关注点(如日志记录、事务管理、权限控制等)从业务逻辑中分离出来,以提高代码的可维护性和可扩展性。的切面默认优先级最低(数值最大)‌。

qq_35201802的博客 1384

SpringBoot(二十六)SpringBoot自定义注解

注解在springboot日常开发中使用的频率是很高的,官方为我们提供了很多注解,比如:@Autowired、@GetMapping等……至此,自定义注解其实就已经完成了,但是,这么作没有什么实际的意义?1) @Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)以上大概就是在Springboot中自定义注解的全过程,有好的建议,请在下方输入你的评论。注解元素必须要有值,我们定义注解元素时,经常使用空字符串,0作为默认值,但是我们有些特定的需求官方提供的注解是没有的。

camellia的博客 1468

算法集

.NET算法集 1.   选择排序usingSystem;  usingSystem.Collections.Generic;  usingSystem.Linq;  usingSystem.Text;    namespacesorter  {      public class SelectionSorter      {          private int min;          ...

史凯凯的编程技术博客 479

SpringBoot:切面AOP实现权限校验:实例演示与注解全解

包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,在本例中指 com.mutest.controller包、子包下所有类的方法。用户请求的 url 为:http://localhost:8080/aop/name,ip地址为:0:0:0:0:0:0:0:1。):这个星号表示方法名,* 表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数。注解相对应,指定的方法在切面切入目标方法之后执行,也可以做一些完成某方法之后的 Log 处理。的值必须要和参数保持一致,否则会检测不到。

weixin_42179304的博客 1365

.net6数据结构与算法

程序 = 数据结构 + 算法;数据:其实就是程序的核心,程序就是为了解决问题,管理数据。数据结构:就是一个容器,用来存放数据,不同的数据结构有不同的特点,为了更好的完成数据的存储和管理。算法:是指解题方案的准确而完整的描述,是一系列解决问题的清晰命令,算法代表着用系统的方法描述解决问题的策略机制。链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

CZ_TyT的博客 2729

【Spring Boot】# 使用@Scheduled注解无法执行定时任务

在 Spring Boot中,使用@Scheduled注解来定义定时任务时,定时任务不执行;或未在规定时间执行。@Component/*** 5秒执行一次*/")/*** 10秒执行一次*/")

m0_74824552的博客 990

Spring Boot中使用注解拦截器实现通用校验器和基于角色的权限注解

通过使用Spring Boot的注解和拦截器,我们可以优雅地实现通用校验器和灵活的权限控制。本文将以电商交易系统为案例,详细讲解如何在Spring Boot中实现支持角色入参的权限校验器,以及如何通过注解拦截器实现通用校验器,提供高拓展性和可维护性的解决方案。

J老熊 1682

SpringBoot开发自定义注解

在开发SpringBoot程序的过程中,有可能与其他业务系统进行对接开发,获取封装公共的API接口等等,有的时候为了开发的便捷性以及间接性,会需要开发一些自定义的注解,来实现一些业务。 下面就来说一下在SpringBoot里开发自定义注解。 一: 首先看一下完整的结构图: 在进行开发自定义注解前需要在POM文件中添加aop依赖 <dependency> <groupId&gt...

庸人1396 6万+

若依管理系统——自定义注解使用切面记录操作日志

目录一、介绍二、登录日志记录分析2.1 异步定时任务管理器(线程池)2.2 异步工厂(产生任务用)三、用户操作行为记录分析3.1 定义注解3.2 定义切面3.3 使用注解四、源码SQL 一、介绍 系统访问记录表: 操作日志记录表: 二、登录日志记录分析 2.1 异步定时任务管理器(线程池) 无论登录成功还是失败,都会用一个异步的任务AsyncManager.me().execute()来保存登录结果: 通过SpringUtils工具类的getBean方法获得定时任务线程池对象,(也可以通过@Auto

DreamsArchitects的博客 5592

c#,.net,算法

c#的一些面试笔试必备题目,及各类重要算法,十分适合应届生求职,面试宝典

.net各种算法集合

冒泡排序 快速排序 折半插入排序 希尔排序 基数排序 直接插入排序

.net算法 递归

.net的算法 递归算法 可以好好理解

.net 递归算法 .net 递归算法.net 递归算法

.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法

Maya绑定:人物绑定详细案例(创建骨骼、镜像骨骼、IK创建、IK打组、IK控制器、FK控制器、烘焙动画、导出)

Maya绑定:人物绑定详细案例(创建骨骼、镜像骨骼、IK创建、IK打组、IK控制器、FK控制器、烘焙动画、导出)

m0_45877477的博客 1635
上一篇: TreeView使用集锦
下一篇: Asp.Net细节性问题精萃
boy_north
博客等级 码龄21年 13粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值