学习笔记075——编码和加密

SHA1摘要算法 SHA1算法主要由以下四个步骤组成: 1.填充:在原始数据的末尾填充一些比特位,使得数据长度能够被512位(64字节)整除,如果长度已经满足该条件,则在末尾填充一个64位的比特位表示数据长度。 2.划分:将填充后的数据划分为若干个512位的块。 3.处理:对每个512位块进行处理,包括以下步骤: (1)扩展:将块扩展为80个32位字,使用位运算和布尔函数来实现。 (2)迭代:进行80轮迭代计算,每轮计算都会更新5个变量的值,其中4个变 量是中间结果,第5个变量是当前处理的块。 (3)压缩:将5个变量的 阅读详情

一、URLENCODE

(1)为什么使用

1、是因为当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的。

2、因为 url 对字符有限制,比如把一个邮箱放入 url,就需要使用 urlencode 函数,因为 url 中不能包含 @ 字符。

3、url转义其实也只是为了符合url的规范而已。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。

(2)转换规则

urlencode:

返回字符串,此字符串中除了-_.之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)
按照每个字符对应的字符编码,不是符合我们范围的,统统的转化为%的形式也就是了。自然也是16进制的形式。

那哪些字符是需要转化的呢

ASCII 的控制字符
这些字符都是不可打印的,自然需要进行转化。

什么是可打印字符?

在ASCII码中规定,0-31、128这33个字符属于控制字符,32-127这95个字符属于可打印字符,也就是说网络传输只能传输这95个字符,不在这个范围内的字符无法传输。那么该怎么才能传输其他字符呢?其中一种方式就是使用Base64。

一些非ASCII字符

这些字符自然是非法的字符范围。转化也是理所当然的了。

一些保留字符

很明显最常见的就是“&”了,这个如果出现在url中了,那你认为是url中的一个字符呢,还是特殊的参数分割用的呢?

就是一些不安全的字符了。

例如:空格。为了防止引起歧义,需要被转化为“+”。

和编码无关

通过urlencode的转化规则和目的,我们也很容易的看出,urleocode是基于字符编码的。同样的一个汉字,不同的编码类型,肯定对应不同的urleocode的串。gbk编码的有gbk的encode结果。

apache等服务器,接受到字符串后,可以进行decode,但是还是无法解决编码的问题。编码问题,还是需要靠约定或者字符编码的判断解决。

因此,urleocode只是为了url中一些非ascii字符,可以正确无误的被传输,至于使用哪种编码,就不是eocode所关心和解决的问题了。

(3)java 实现

/**
 * @author htl
 * @date 2024/12/25
 */
public class UrlEncode {

    public static void main(String[] args) throws UnsupportedEncodingException {
        String encode = URLEncoder.encode("http://itnanls.cn/中文  ,。?", "UTF-8");
        System.out.println(encode);

        String decode = URLDecoder.decode(encode, "UTF-8");
        System.out.println(decode);
    }
}

二、Base64编解码

1、Base64是什么

  • Base64是一种用64个字符来表示任意二进制数据的方法。
  • 它是一种编码方式,而非加密方式。
  • 它通过将二进制数据转变为64个“可打印字符”,完成了数据在HTTP协议上的传输。

2、使用场景

Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。

什么是可打印字符?

在ASCII码中规定,0-31、128这33个字符属于控制字符,32-127这95个字符属于可打印字符,也就是说网络传输只能传输这95个字符,不在这个范围内的字符无法传输。那么该怎么才能传输其他字符呢?其中一种方式就是使用Base64。

既然可打印的只有95,而比95小的整数最大的2的次方的数字就是64了。

3、加密规则

关于这个编码的规则:

  • 首先将待编码的内容转换成8位二进制,每3个字符为一组;

  • 如果编码前的长度是3n+1,编码后的内容最后面补上2个 ‘=’,如果编码前的长度是3n+2,编码后 的内容最后面补上1个 ‘=’。

  • 再将每一组的二进制内容拆分成6位的二进制,不足6位的后面补足0;

  • 每个6进制的数字前面补足0,保证变成8位二进制;

  • 将补足后的内容根据base64编码表转换成base64内容输出;

(不足四个字符的时候会用 ‘=’ 来补足,下面会说明)

例子

编码前 “hb”

**1.**根据ascii码转换成8位二进制,3个为一组:

  01101000,01100010

**2.**编码前长度是3n+2,所以后面补1个 ‘=’:

  01101000,01100010,=

**3.**拆分成6位二进制,不足6位的在后面补足0,0010补足变成001000:

  011010,000110,001000,=

**4.**每个6进制的数字前面补足0:

  0011010,00000110,00000010,=

**5.**根据base64编码表输出:

  aGI=

Table 1: The Base64 Alphabet

索引对应字符索引对应字符索引对应字符索引对应字符
0A17R34i51z
1B18S35j520
2C19T36k531
3D20U37l542
4E21V38m553
5F22W39n564
6G23X40o575
7H24Y41p586
8I25Z42q597
9J26a43r608
10K27b44s619
11L28c45t62+
12M29d46u63/
13N30e47v
14O31f48w
15P32g49x
16Q33h50y

4、总结

  • 可以将任意的二进制数据进行Base64编码。
  • 数据加密之后,数据量会变大,变大1/3左右。
  • 编码后有个非常显著的特点,末尾有个=号。
  • 可进行反向解密。
  • Base64编码具有不可读性

5、Base64程序

/**
 * @author htl
 * @date 2024/12/25
 */
public class Base64Test {

    public static void main(String[] args) {
        // 获取编码器
        Base64.Encoder encoder = Base64.getEncoder();
        byte[] encode = encoder.encode("abc".getBytes());
        System.out.println(new String(encode));

        // 获取解码器
        Base64.Decoder decoder = Base64.getDecoder();
        byte[] decode = decoder.decode(encode);
        System.out.println(new String(decode));
    }
}

三、hash摘要算法

1、MD5

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

/**
 * @author htl
 * @date 2024/12/25
 */
public static void main(String[] args) throws Exception {
    MessageDigest md5 = MessageDigest.getInstance("MD5");
    byte[] digest = md5.digest("123".getBytes());
    System.out.println(digest.length);
}
16

2、SHA1

SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。

SHA 家族

正式名称为 SHA 的家族第一个成员发布于 1993年。然而人们给它取了一个非正式的名称 SHA-0 以避免与它的后继者混淆。两年之后, SHA-1,第一个 SHA 的后继者发布了。 另外还有四种变体,曾经发布以提升输出的范围和变更一些细微设计: SHA-224, SHA-256, SHA-384 和 SHA-512 (这些有时候也被称做 SHA-2):

public static void main(String[] args) Exception {
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        byte[] digest = sha1.digest("123".getBytes());
        System.out.println(digest.length);
}

20

3、SHA256

SHA256算法使用的哈希值长度是256位。

public static void main(String[] args) throws Exception {
    MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
    byte[] digest = sha256.digest("123".getBytes());
    System.out.println(digest.length);
}

32

4、SHA512

算法使用的哈希值长度是512位。

public static void main(String[] args) throws Exception {
    MessageDigest sha512 = MessageDigest.getInstance("SHA-512");
    byte[] digest = sha512.digest("123".getBytes());
    System.out.println(digest.length);
}

64

四、对称加密

1、DES算法

DES 加密算法是一种 分组密码,以 64 位为 分组对数据 加密,它的 密钥长度 是 56 位,加密解密 用 同一算法。

数据加密标准(Data Encryption Standard),简称DES,是由IBM公司提交,美国政府于1977年1月5日颁布的一种加密算法。

  • DES的设计目标是,用于加密保护静态存储和传输信道中的数据,安全使用10~15年。

  • DES综合运用了置换、代替、代数等多种密码技术。它设计精巧、实现容易、使用方便,堪称是适应计算机环境的近代分组密码的一个典范。DES的设计充分体现了Shannon所阐述的设计密码的思想,标志着密码的设计与分析达到了新的水平。

  • DES是一种分组密码。明文、密文和密钥的分组长度都是64位。

  • DES是面向二进制的密码算法。因而能够加解密任何形式的计算机数据。

  • DES是对合运算,因而加密和解密共用同一算法,从而使工程实现的工作量减半。

  • DES的密码结构属于Feistel结构。

(1)DES的加密过程

  • 64位密钥经子密钥产生算法产生出16个48位子密钥:K1,K2,…,K16,分别供第1次,第2次,…,第16次加密迭代使用。

  • 64位明文首先经过初始置换IP,将数据打乱重新排列并分成左右两半,左边32位构成L0,右边32位构成R0。

  • 第i次加密迭代:由轮函数f实现子密钥Ki对Ri-1的加密,结果为32位的数据组f ( Ri-1 , Ki )。f ( Ri-1 , Ki )再与Li-1模2相加,又得到一个32位的数据组Li-1 ⊕ f ( Ri-1 , Ki )。以Li ⊕ f ( Ri-1 , Ki )作为下一次加密迭代的Ri,以Ri-1作为下一次加密迭代的Li ( i = 1,2,…,16)。

  • 按照上一步的规则进行16次加密迭代。

  • 第16次加密迭代结束后,以R16为左,L16为右,合并产生一个64位的数据组。再经过逆初始置换IP-1,将数据重新排列,便得到64位密文。


(2)DES的解密过程

  • 64位密钥经子密钥产生算法产生出16个48位子密钥:K1,K2,…,K16,分别供第1次,第2次,…,第16次解密迭代使用。

  • 64位密文首先经过初始置换IP,将数据打乱重新排列并分成左右两半,左边32位构成R16,右边32位构成L16。

  • 第17-i次解密迭代:由轮函数f实现子密钥Ki对Li的解密,结果为32位的数据组f ( Li , Ki )。f ( Li , Ki )再与Ri模2相加,又得到一个32位的数据组Ri ⊕ f ( Li , Ki )。以Ri ⊕ f ( Li , Ki )作为下一次解密迭代的Li-1,以Li作为下一次解密迭代的Li-1 ( i = 16,15,…,1)。

  • 按照上一步的规则进行16次解密迭代。

  • 第16次解密迭代结束后,以L0为左,R0为右,合并产生一个64位的数据组。再经过逆初始置换IP-1,将数据重新排列,便得到64位明文。

(3)java实现

/**
 * @author htl
 * @date 2024/12/25
 */
public class DES {

    /**
     * 算法秘钥
     */
    private static final byte[] DES_KEY = {11, 21, 1, -110, 82, -32, -85, -128, -65 ,44,-2};

    /**
     * 算法名字
     */
    private static final String ALGORITHM_NAME = "DES";
    /**
     * 数据加密,算法(DES)
     * @param data
     * 要进行加密的数据
     * @return 加密后的数据
     */
    public static byte[] encryptDes(byte[] data) {
        try {
            // DES算法要求有一个可信任的随机数源
            DESKeySpec desKey = new DESKeySpec(DES_KEY);
            // 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM_NAME);
            SecretKey key = keyFactory.generateSecret(desKey);
            // 加密对象
            Cipher cipher = Cipher.getInstance(ALGORITHM_NAME);
            cipher.init(Cipher.ENCRYPT_MODE, key);
            // 加密
            return cipher.doFinal(data);
        } catch (Exception e) {
            throw new RuntimeException("加密错误,错误信息:", e);
        }
    }

    /**
     * 解密
     * @param cryptData
     * @return
     */
    public static byte[] decryptBasedDes(byte[] cryptData) {
        try {
            // DES算法要求有一个可信任的随机数源
            DESKeySpec desKey = new DESKeySpec(DES_KEY);
            // 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM_NAME);
            SecretKey key = keyFactory.generateSecret(desKey);
            // 解密对象
            Cipher cipher = Cipher.getInstance(ALGORITHM_NAME);
            cipher.init(Cipher.DECRYPT_MODE, key);
            // 把字符串解码为字节数组,并解密
            return cipher.doFinal(cryptData);
        } catch (Exception e) {
            throw new RuntimeException("解密错误,错误信息:", e);
        }
    }

    public static void main(String[] args) {

        String data = "itnanls is so shuai";

        byte[] result = encryptDes(data.getBytes());
        System.out.println("加密后:" + Base64.getEncoder().encode(result));

        // DES数据解密
        byte[] source = decryptBasedDes(result);
        System.err.println("解密后:" + new String(source));
    }
}

2、AES

(1)介绍

密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。

这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一 [1] 。

(2)java实现

/**
 * /**
 *
 * @author htl
 * @date 2024/12/25
 */
public class AESUtil {

    /**
     * 算法秘钥
     */
    private static final byte[] AES_KEY = {11, 21, 1, -110, 82, -32, -85,
            -128, -65, 44, -2, 23, 12, 32, 23, 45};

    /**
     * 算法名字
     */
    private static final String ALGORITHM_NAME = "AES";

    public static byte[] encrypt(byte[] src) {
        try {
            // 根据秘钥和加密算法,生成秘钥对象
            SecretKeySpec secretKeySpec = new SecretKeySpec(AES_KEY, ALGORITHM_NAME);
            // 得到加密器的实例
            Cipher cipher = Cipher.getInstance(ALGORITHM_NAME);
            // 初始化密码器
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
            return cipher.doFinal(src);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static byte[] decrypt(byte[] src) {
        try {
            SecretKeySpec secretKeySpec = new SecretKeySpec(AES_KEY, ALGORITHM_NAME);
            Cipher cipher = Cipher.getInstance(ALGORITHM_NAME);
            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
            return cipher.doFinal(src);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {

        String src = "itnanls is so cool!";

        byte[] encrypt = encrypt(src.getBytes());
        assert encrypt != null;
        System.out.println(new String(encrypt));

        byte[] decrypt = decrypt(encrypt);
        assert decrypt != null;
        System.out.println(new String(decrypt));
    }
}

五、非对称加密

(1)介绍

  • RSA加密算法:RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

  • RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。

  • 解密者拥有私钥,并且将由私钥计算生成的公钥发布给加密者。加密都使用公钥进行加密,并将密文发送到解密者,解密者用私钥解密将密文解码为明文。

(2)java实现

/**
 * @author htl
 * @date 2024/12/25
 */
public class RSATest {

    private static final String PUBLIC_KEY = "publicKey";

    private static final String PRIVATE_KEY = "privateKey";

    private static final String ALGORITHM_NAME = "RSA";

    private static final Integer KEY_SIZE = 1024;

    public static final RsaKeyPair RSA_KEY_PAIR = new RsaKeyPair();

    /**
     * 存放密钥对的静态内部类
     */
    private static final class RsaKeyPair {
        public RSAPublicKey publicKey;
        public RSAPrivateKey privateKey;
    }

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

        initKey();

        // 公钥加密,私钥解密,比人加密给我看,就是加密
        byte[] publicKeyEncrypt = encryptByPublicKey("123".getBytes());
        byte[] privateKeyDecrypt = decryptByPrivateKey(publicKeyEncrypt);
        System.out.println(new String(privateKeyDecrypt));
        // 私钥加密,公钥解密,我加密了,别人拿公钥解密看,能证明文件是我的,数字签名
        byte[] privateKeyEncrypt = encryptByPrivateKey("123".getBytes());
        byte[] publicKeyDecrypt = decryptByPublicKey(privateKeyEncrypt);
        System.out.println(new String(publicKeyDecrypt));
    }

    // 初始化密钥对
    public static void initKey(){
        // 实例化密钥对生成器
        KeyPairGenerator keyPairGen = null;
        try {
            keyPairGen = KeyPairGenerator.getInstance(ALGORITHM_NAME);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

        // 初始化密钥对生成器
        assert keyPairGen != null;
        keyPairGen.initialize(KEY_SIZE);

        // 生成密钥对
        KeyPair keyPair = keyPairGen.generateKeyPair();

        // 公钥
        RSA_KEY_PAIR.publicKey = (RSAPublicKey) keyPair.getPublic();

        // 私钥
        RSA_KEY_PAIR.privateKey = (RSAPrivateKey) keyPair.getPrivate();

    }

    /**
     * 公钥解密
     * @param data
     * 待解密数据
     * @return byte[] 解密数据
     * @throws Exception
     */
    public static byte[] decryptByPublicKey(byte[] data)
            throws Exception {

        // 取得公钥
        // 此类表示根据 ASN.1 类型 SubjectPublicKeyInfo 进行编码的公用密钥的 ASN.1 编码。
        // X.509 标准中定义的 SubjectPublicKeyInfo 语法
        X509EncodedKeySpec x509KeySpec =
                new X509EncodedKeySpec(RSA_KEY_PAIR.publicKey.getEncoded());
        KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM_NAME);

        // 生成公钥
        PublicKey publicKey = keyFactory.generatePublic(x509KeySpec);

        // 对数据解密
        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());

        cipher.init(Cipher.DECRYPT_MODE, publicKey);

        return cipher.doFinal(data);
    }

    /**
     * 公钥加密
     * @param data
     * 待加密数据
     * @return byte[] 加密数据
     * @throws Exception
     */
    public static byte[] encryptByPublicKey(byte[] data)
            throws Exception {

        // 取得公钥
        X509EncodedKeySpec x509KeySpec =
                new X509EncodedKeySpec(RSA_KEY_PAIR.publicKey.getEncoded());

        KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM_NAME);

        PublicKey publicKey = keyFactory.generatePublic(x509KeySpec);

        // 对数据加密
        Cipher cipher = Cipher.getInstance(ALGORITHM_NAME);
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);

        // 完成加密
        return cipher.doFinal(data);
    }

    /**
     * 私钥加密
     *
     * @param data
     * 待加密数据
     * @return byte[] 加密数据
     * @throws Exception
     */
    public static byte[] encryptByPrivateKey(byte[] data)
            throws Exception {

        // 取得私钥
        // 该类代表私有密钥的ASN.1编码,根据ASN.1类型PrivateKeyInfo进行编码。
        // PrivateKeyInfo语法在PKCS#8标准中
        PKCS8EncodedKeySpec pkcs8KeySpec =
                new PKCS8EncodedKeySpec(RSA_KEY_PAIR.privateKey.getEncoded());
        KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM_NAME);

        // 生成私钥
        PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);

        // 初始化加密器
        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
        cipher.init(Cipher.ENCRYPT_MODE, privateKey);
        // 进行加密
        return cipher.doFinal(data);
    }


    /**
     * 私钥解密
     *
     * @param data
     * 待解密数据
     * @return byte[] 解密数据
     * @throws Exception
     */
    public static byte[] decryptByPrivateKey(byte[] data)
            throws Exception {

        // 取得私钥
        // 该类代表私有密钥的ASN.1编码,根据ASN.1类型PrivateKeyInfo进行编码。
        // PrivateKeyInfo语法在PKCS#8标准中
        PKCS8EncodedKeySpec pkcs8KeySpec =
                new PKCS8EncodedKeySpec(RSA_KEY_PAIR.privateKey.getEncoded());

        KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM_NAME);

        // 生成私钥
        PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);

        // 对数据解密
        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());

        cipher.init(Cipher.DECRYPT_MODE, privateKey);

        return cipher.doFinal(data);
    }
}
aes-128-gcm 不需要传iv的加密方式和解密 1.nodejs 版本 var crypto = require("crypto"); /*** * @version 1.0 aes-128-gcm 加密 * @params msg 为加密信息 password为32位的16进制key * @return 返回base64编码 * */ function Encrypt(msg, password) { try { var pwd = Buffer.from(password, 'hex'); 阅读详情

相关推荐

075、RDMA安全机制:加密与认证(IPsec over RDMA)

本文详解了在RDMA场景下实现高效加密的挑战与解决方案。针对传统加密方案导致延迟飙升的问题,提出基于Mellanox网卡硬件卸载的IPsec over RDMA方案,通过内核XFRM接口配置安全策略、合理设置MTU与队列深度,并强调避免应用层加密、密钥自动化管理及监控硬件计数器等关键实践,最终实现低延迟(+1-2μs)、高吞吐的加密通信,适用于金融等对性能与安全要求极高的场景。

Jack010169的博客 12

秒懂编码和加密

一、URLENCODE (1)为什么使用 1、是因为当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的。 2、因为 url 对字符有限制,比如把一个邮箱放入 url,就需要使用 urlencode 函数,因为 url 中不能包含 @ 字符。 3、url转义其实也只是为了符合url的规范而已。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。 (2)转换规则 urlencode: 返回字符串,此字符串中除了-_.之外的所有非字母数字字符都将被替换成百分号(%)

qq_42219004的博客 1424

42、放射治疗与图论标签加密技术的双重探索

本文探讨了放射治疗中的三维适形放射治疗(3DCRT)与调强放射治疗(IMRT)的技术对比,强调IMRT在正常组织保护方面的优势及对图像引导的依赖,并提出了治疗技术选择的流程。同时,文章介绍了图论标签加密技术,包括顶点魔法、边魔法和全魔法标签的概念及其在信息安全中的创新应用。通过将明文转换为魔法文本再加密,实现双重安全保障,并展示了其在身份认证、数据存储和物联网安全中的拓展潜力。最后,文章指出两种技术虽领域不同,但在精准性、适应性和创新思维方面具有共通启示,展望未来在医疗与信息安全领域的持续发展。

qqq44的博客 82

使用MessageDigest 对字符串进行 MD5 或者 SHA1 SHA2 加密。

在java中提供了一个MessageDigest 的抽象类。         //MD5是16位,SHA是20位         //MessageDigest md= MessageDigest.getInstance("MD5");       MessageDigest messageDigest=MessageDigest.getInstance("SHA-1");      me

IT*男 的专栏 2169

JS逆向之网易云音乐

网易云音乐js逆向

自成背后的博客 4479

【R】R画图不显示中文问题

系统mac os 11 RstutioVersion1.2.1335 RVersion3.6.2 画图里的中文一直显示成方框。 ggplot()+geom_point(aes(x=ta1$X2011年,y=ta1$X2012))+ xlab("2011年")+ylab("2021年") 解决方案: 使用showtext。 install.packages("showtext", repos = "https://mirrors.ustc.edu.cn/CRAN/") in...

weixin_41772125的博客 1万+

MessageDigest简介

本文博客原文 参考文章:http://blog.sina.com.cn/s/blog_4f36423201000c1e.html 一、概述 java.security.MessageDigest类用于为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。简单点说就是用于生成散列码。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值。关于信...

baobaoupup 1064

联想服务器ThinkSystemRAID阵列设置教程

关注我不迷路,全是干货! 以联想ThinkSystemSR530为例子进行示范。 开机点按【F1】 点击——【UEFI设置】 依次点击——【系统设置】——【存储】 点击——【RAID卡】 PS:本次服务器配置的是730-8i 阵列卡,按实际情况选中需要设置的阵列卡即可。 点击——【Main Menu】 点击——【Configuration Management】 点击——【Create Virtual Drive】 点击——【Select RAID Leve..

littlelotusK的博客 2万+

使用MessageDigest对字符串进行sha1、md5加密

对字符串进行加密是一个比较常见的技术,比如对密码加密。MessageDigest对象是java里API使用起来非常方便。 sha1加密 /** * sha1加密方法 * @param src * @return */ public static String sha1(String src){ try { ...

qq_34917117的博客 1588

【js逆向学习】新手视角破解「广东省公共资源交易平台」

学习js逆向,破解广东省公共资源交易平台,详细记录个人探索、踩坑全过程。网站地址: aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c=仅供学习参考,如有疑问欢迎交流,一起学习进步。

DCSDA的博客 3315

从零到一:Firefly-RK3399上的Ubuntu镜像构建与GPU加速实战

本文详细介绍了在Firefly-RK3399开发板上从零构建深度优化的Ubuntu系统镜像的全过程,包括交叉编译环境配置、内核定制、GPU加速环境部署(Mesa Panfrost驱动、OpenCL/Vulkan支持)以及深度学习推理优化(TFLite + LinuxNN)。通过实战案例展示了如何充分发挥Mali-T860 GPU的硬件潜力,提升边缘AI应用的性能和能效。

pz8901234的博客 1019

weixin075家政服务管理系统

Java简介Java是一种面向对象的静态式编程语言。Java编程语言具有多线程和对象定向的特点。其特点是根据方案的属性将方案分为几个不同的模块,这些模块是封闭的和多样化的,在申请过程中具有很强的独立性。Java语言在计算机软件开发过程中的运用可以达到交互操作的目的,通过各种形式的交换,可以有效地处理所需的数据,从而确保计算机软件开发的可控性和可见性。开发java语言时,保留了网络接口,Java保留的缺省网络接口可以与web应用程序编程所依赖的类别库相匹配。

G3259093417的博客 959

BPMN-JS :修改节点“Change Type”事件类型

修改路径:node_modules\bpmn-js\lib\features\replace\ReplaceOptions.js。

TaylorY的博客 678

python代码加密运行,Python代码使用私有指数和模数解密64位块的RSA加密文件

I have an encrypted file that I am trying to decode as part of an experiment. After working hard and long, I have been able to extract the private exponent from the public key since the modulus was sm...

weixin_33846982的博客 261

【重要内容】敬告读者

由于优快云近期将要搞事情,此专栏建议已购买的用户将内容保存到本地。尚未购买的用户请待9月1日后再决定是否需要购买。如此规则上线,本人将会关闭此专栏。并寻找其他渠道进行发布。

魔落的博客 910

YOLO26涨点改进 | Conv篇/小目标改进 | AAAI 2025 FBRT-YOLO 两个轻量级FCM和MKP模块, 助力无人机航拍任务VisDrone、UAVDT和AI-TOD高效涨点

本文提出FBRT-YOLO26模型,通过引入两个轻量级模块FCM和MKP优化航拍图像检测性能。FCM模块通过特征互补映射解决小目标信息丢失问题,MKP模块利用多尺度卷积核增强目标感知能力。在VisDrone等数据集上的实验表明,该方法在精度和速度上均优于现有实时检测器。文章详细介绍了模块结构、核心代码实现及YAML配置文件修改方法,为航拍图像中的小目标检测提供了高效解决方案。该模型实现了检测精度与效率的良好平衡,具有实际应用价值。

Ai缝合怪、助力小伙伴高效发论文 368

【小迪安全v2023】学习笔记集合 --- 持续更新

本文汇总了《小迪安全v2023》网络安全学习笔记全集,涵盖WEB攻防(ASP/PHP/Java/Python等)、服务安全、APP逆向、云安全、漏洞发现、权限提升等12大模块140+技术专题,包含XSS/CSRF/SQL注入等常见漏洞原理及实战案例。作者整理了配套视频课件资源(百度网盘提取码:yyds),声明仅供学习交流。笔记持续更新中,采用技术原理+实战分析+防御方案的体系化写作方式,适合网络安全从业者系统学习参考。

uli0n的博客 1万+

Flink CDC 中 StartupOptions 模式详解

Flink CDC 的 StartupOptions 模式用于指定作业启动时从源数据读取数据的起始位置,不同的模式适用于不同的业务场景,可满足多样化的数据处理需求,主要有 Initial 模式、Earliest 模式、Latest 模式、SpecificOffset 模式和 Timestamp 模式。

RodJohnsonDoctor的专栏 849

个人编码好奇人士测试版

504b 0304 0a00 0000 0000 b480 d646 0000 0000 0000 0000 0000 0000 0900 0000 4d45 5441 2d49 4e46 2f50 4b03 040a 0000 0008 00b3 80d6 466f 016c 7b95 0300 0099 0c00 0014 0000 004d 4554 412d 494e 462f 4d41 ...

qq_38056494的博客 3万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python破解反爬_Python破解有道翻译js加密反爬

必须传入以下参数i: 多么操蛋的from: AUTOto: AUTOsmartresult: dictclient: fanyideskwebsalt: 15639358877919 #不断变化 盐值sign: a4c83eec2d54d4b4d783182da801d34b # 签名 不断变化ts: 1563935887791 #时间戳 不断变化bv: 53539dde41bde18f4...

weixin_39957068的博客 122

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

STM32G0系列实现数字签名与验证

加密是将明文数据通过某种特殊算法处理,使其成为一段不可读的代码,称为。密文可以通过密钥解密还原为。通过这样的途径,可以保护数据在传输的过程不会被非法窃取、阅读的目的。

zjl9556的博客 2402

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

使用INDY TCP组件实现基于协议采用XML方式的文件传输

 我实现了个,传输的文件大小都没问题,但是除了文本类型的文件打开后查看正常外,其它的文件比如PDF,rar文件等都无法打开。问题我已经找到并解决了,问题的原因是:因为考虑到XML的编码问题,所以我对传输的文件数据部分的内容进行了加密,在客户端解密,但是可能是加密解密过程中丢失了某些信息,所以才会无法打开。现在我已经把加密解密过程换成采用Mime编码和解码。编码:ItemChildNod

大伟的代码空间 1543

信安学习第十二期

内网综合扫描工具,方便一键自动化、全方位漏扫扫描。

weixin_46392225的博客 423

【愚公系列】2021年12月 攻防世界-进阶题-MISC-075(test.pyc)

文章目录一、test.pyc二、答题步骤1.uncompyle62.base64解码3.脚本总结 一、test.pyc 题目链接:https://adworld.xctf.org.cn/task/task_list?type=misc&number=1&grade=1&page=5 二、答题步骤 1.uncompyle6 首先对题目给出的pyc文件进行反编译,发现反编译出了一些问题,但得到了一些有用的信息。 观察到 const 中的是反过来是 base64 编码 整理得到:fjU

愚公智库 3万+

21312312

0071B368BB81EB82DDD8B80236F9D3E3 F97A2CCE5A0B6CFDD9E29180759A396FD39E291A41BAB138 1086BC6495F1DA48F87BD30642E2BC4EDED35BC9AD800E11299021EF1BE145E4 CA6458FAE745C5FEF87BD30642E2BC4EDED35BC9AD800E1129

rockra的博客 434

unicode

Unicode( 统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的 二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。 U2FsdGVkX19pkymvGyb3QKfwQIIQXbw+7N12jHcnCuaGsNlGpg+XTUAXAoFgqXPL PfSDSUJ0gYBEEpEkjwi4f/wOo2hCO5NLXpcNa.

xmh_sxh_1314的博客 278
上一篇: 学习笔记074——CentOS安装Redis
下一篇: 学习笔记076——Maven相关笔记资料
须晴日.
博客等级 码龄5年 595粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值