首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在golang中用SHA1PRNG算法生成aes?

在golang中使用SHA1PRNG算法生成AES加密密钥的步骤如下:

  1. 导入必要的包:
代码语言:txt
复制
import (
    "crypto/aes"
    "crypto/cipher"
    "crypto/rand"
    "crypto/sha1"
    "io"
)
  1. 定义生成密钥的函数:
代码语言:txt
复制
func generateAESKey(password string, salt []byte) []byte {
    sha1Hash := sha1.New()
    sha1Hash.Write([]byte(password))
    sha1Hash.Write(salt)
    key := sha1Hash.Sum(nil)
    return key[:16] // AES-128使用16字节密钥
}
  1. 定义加密函数:
代码语言:txt
复制
func encrypt(plainText []byte, key []byte) ([]byte, error) {
    block, err := aes.NewCipher(key)
    if err != nil {
        return nil, err
    }

    cipherText := make([]byte, aes.BlockSize+len(plainText))
    iv := cipherText[:aes.BlockSize]
    if _, err := io.ReadFull(rand.Reader, iv); err != nil {
        return nil, err
    }

    stream := cipher.NewCTR(block, iv)
    stream.XORKeyStream(cipherText[aes.BlockSize:], plainText)

    return cipherText, nil
}
  1. 定义解密函数:
代码语言:txt
复制
func decrypt(cipherText []byte, key []byte) ([]byte, error) {
    block, err := aes.NewCipher(key)
    if err != nil {
        return nil, err
    }

    iv := cipherText[:aes.BlockSize]
    cipherText = cipherText[aes.BlockSize:]

    stream := cipher.NewCTR(block, iv)
    stream.XORKeyStream(cipherText, cipherText)

    return cipherText, nil
}
  1. 调用函数生成密钥并进行加密解密操作:
代码语言:txt
复制
func main() {
    password := "myPassword"
    salt := []byte("mySalt")

    key := generateAESKey(password, salt)

    plainText := []byte("Hello, World!")

    cipherText, err := encrypt(plainText, key)
    if err != nil {
        panic(err)
    }

    decryptedText, err := decrypt(cipherText, key)
    if err != nil {
        panic(err)
    }

    fmt.Println("Decrypted Text:", string(decryptedText))
}

以上代码演示了如何在golang中使用SHA1PRNG算法生成AES加密密钥,并进行加密和解密操作。请注意,这只是一个简单的示例,实际应用中可能需要更多的安全措施和错误处理。对于更复杂的加密需求,建议使用专业的加密库或框架。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android中的AES加密--上

,PKCS7Padding可支持IOS加解密 //初始化,此方法可以采用三种方式,按加密算法要求来添加。...,传入AES,说明我们最后要生成的时AES的密钥 SecureRandom 安全随机算法,他的作用时将我们的密钥经过一定的算法("SHA1PRNG"强随机算法),并通过"Crypto"安全供应商返回,其实说白了...就是给密钥利用随机算法加盐,使得密钥更安全。...最后返回新的密钥keyEncoded 问题也时出现再这里AndroidN(API=27),不再支持SHA1PRNG算法的实现以及Crypto这个安全供应商,原因是不安全,也不可靠参考原因 第三版 兼容版本...现在要考虑的问题是,如何保存要是密钥字符串,本地文件好像也不安全,JNI编译后后生成so,单单加密一个用户信息,有点太重了。 那么放在哪里呢?

4.7K20
  • Security "Crypto" provider deprecated in Android N

    Android:7.0 后加密库 Crypto 被废弃 一.问题描述 我们知道加密[算法]都是需要密钥的,比如 AES 算法支持128 比特、192 比特和 256 比特三种长度的密钥,通常这些密钥会被转化成字节数组明文写在代码中或者写入成...如果你是直接使用这些密钥的话是不会有任何问题的,但是有的时候我们需要通过一个字符串格式的密码来生成密钥。..., "AES"); EXAMPLE: public static final String DEPREACATED_SECURE_ALGORITHM_SHA1PRNG = "SHA1PRNG";...官方开发人员在 Axndroid N 上已经将相关的 Crypto provider 和 SHA1PRNG 算法同时废弃掉了,并计划在后续的 SDK 中完全移除相关的库。...官方计划将完全删除Crypto和SHA1PRNG,一般情况下许多系统假定SHA1PRNG算法存在,在去除后将返回一个OpenSSLRandom实例,实例是根据OpenSSL派生出的。

    55950

    Android常用加密方式

    是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。...但实际上MD5不是一种加密算法,只是一种算法,因为它是一个不可逆的过程,即 MD5 生成消息摘要后是不能通过结果解析得到原来的内容。...WPA/WPA2经常用的加密方式就是AES加密算法。...//AES 加密 private static final String SHA1PRNG = "SHA1PRNG";// SHA1PRNG 强随机种子算法, 要区别4.2以上版本的调用方法...SHA1PRNG"; SHA1PRNG 强随机种子算法, 要区别4.2以上版本的调用方法 /* * 生成随机数,可以当做动态的密钥 加密和解密的密钥必须一致,不然将不能解密 */ public

    1.5K30

    Android 安全

    32位字符串长度值,有利于在数据库中进行存储 后起之秀 MD5与SHA-1是最常用的摘要算法,一个生成16字节一个生成20位字节长度,但是安全强度比较低,都被TLS(传输层安全,一种安全通信协议)禁用。...SHA-2 实际上是一系列摘要算法的统称,总共有 6 种,常用的有 SHA224、SHA256、SHA384,分别能够生成 28 字节、32 字节、48 字节的摘要。...比如: AES128-GCM,意思是密钥长度为 128 位的 AES 算法,使用的分组模式是 GCM;ChaCha20-Poly1305 的意思是 ChaCha20 算法,使用的分组模式是 Poly1305..."AES";//AES 加密     private  static final String  SHA1PRNG="SHA1PRNG";//// SHA1PRNG...强随机种子算法, 要区别4.2以上版本的调用方法     /*      * 生成随机数,可以当做动态的密钥 加密和解密的密钥必须一致,不然将不能解密      */     public static

    1.1K10

    JWT 单点登录(项目实现)「建议收藏」

    拦截器中校验JWT有效性,并在response中重新设置JWT的新值; 3、最后在JWT服务端,依赖JWT工具包,在登录方法中,需要在登录校验成功后调用生成JWT方法,生成一个JWT令牌并且设置到response...apiKeySecretBytes = DatatypeConverter.parseBase64Binary(SecretConstant.BASE64SECRET); // 使用HmacSHA256签名算法生成一个..."); // 选择一种固定算法,为了避免不同java实现的不同算法生成不同的密钥,而导致解密失败 SecureRandom random...= SecureRandom.getInstance("SHA1PRNG"); random.setSeed(key.getBytes());..."); // 选择一种固定算法,为了避免不同java实现的不同算法生成不同的密钥,而导致解密失败 SecureRandom random

    86110

    一日一技: Python 如何突破反爬虫指纹 JA3

    昨天的文章《一日一技:Golang 如何突破 JA3?》里面,我介绍了如何在 Golang 里面突破 JA3算法,实现随意修改 JA3指纹的效果。...今天,我们来介绍如何在 Python 里面,使用 requests 请求网站的时候,修改 JA3指纹。 requests 是基于 urllib3实现的。...而 requests 里面默认的加密算法如下: ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH...MD5 冒号分割了不同的加密算法。这些加密算法每一种顺序其实就对应了一个 JA3指纹字符串,只要我们修改这个顺序,就能得到不同的JA3字符串。...:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:' 'DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+

    4.3K21

    HarmonyOS 如何实现传输中的数据加密

    我们将讨论常见的加密算法 AES 和 RSA)及传输协议( HTTPS 和 TLS)的选择和使用,结合不同场景的数据敏感程度,给出适合的加密方案。...本文将通过对比 AES 和 RSA 等常用加密算法,并探讨如何在 HarmonyOS 中配置 HTTPS/TLS,帮助开发者设计可靠的数据加密传输方案。...密钥生成:使用crypto.generateKeySync生成AES密钥,使用256位加密强度。...以下代码展示了如何在客户端生成RSA密钥对,并对数据进行加密:import crypto from '@ohos.crypto';// RSA密钥生成const { publicKey, privateKey...QA环节Q1: AES和RSA如何选择?AES更适合加密大数据,速度快;而RSA适合加密小数据(密钥),安全性高,适合敏感数据的传输。Q2: 为什么需要HTTPS/TLS?

    11032

    重启Tomcat时,报错deployDirectory Deploying web application directory解决办法

    org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG...Tomcat 使用 SHA1PRNG 算法是基于 SHA-1 算法实现且保密性较强的伪随机数生成器。而在 SHA1PRNG 算法中,有一个种子产生器是根据配置来执行各种操作的。    ...这里的熵池就是当前系统的环境噪音,熵指的是一个系统的混乱程度,系统跟噪音可以通过很多参数来评估,内存的使用,文件的使用量,不同类型的进程的数量等等。...SecureRandom generateSeed  使用 /dev/random 生成种子。...但是 /dev/random 是一个阻塞数字生成器,如果它没有足够的随机数据提供,它就一直等,这迫使 JVM 等待(程序挂起/tomcat启动拖慢)。

    1.3K20

    了解主流加密方式:离散、对称与非对称加密算法

    常见的离散加密算法有MD5和SHA-256。 在Go语言中,我们可以使用Golang的crypto/md5和crypto/sha256包来实现离散加密。...这些包提供了简单且高效的接口,可以轻松地生成哈希值。 对称加密(Symmetric Encryption): 对称加密使用相同的密钥对数据进行加密和解密。这意味着发送方和接收方必须共享相同的密钥。...常见的对称加密算法有DES(Data Encryption Standard)和AES(Advanced Encryption Standard)。...在Go语言中,我们可以使用Golang的crypto/des和crypto/aes包来实现对称加密。这些包提供了简单而高效的接口,可以轻松地进行加密和解密操作。...RSA算法是最常见的非对称加密算法之一。 在Go语言中,我们可以使用Golang的crypto/rsa包来实现非对称加密。该包提供了生成密钥对、加密和解密的函数,使我们能够轻松应用非对称加密。

    42220

    Go加密算法总结

    MD5、SHA1、HMAC等, 主要用于验证,防止信息被修改, :文件校验、数字签名、鉴权协议; 以下介绍golang语言主要的加密解密算法实现。... 15与 16。 4、相邻的两个奇数是互质数。 49与 51。 5、较大数是质数的两个数是互质数。97与88。...Golang加密解密之RSA 概要 这是一个非对称加密算法,一般通过公钥加密,私钥解密。 在加解密过程中,使用openssl生产密钥。...一般地,各个语言也会提供API,用于生成密钥。在Go中,可以查看encoding/pem包和crypto/x509包。...PublicKey和PrivateKey两个类型分别代表公钥和私钥,关于这两个类型中成员该怎么设置,这涉及到RSA加密算法,本文中,这两个类型的实例通过解析文章开头生成的密钥得到。 2 .

    1.6K40
    领券