SecureCompatibleEncryptionExamples

2025-12-11 0 699

安全兼容加密示例

该存储库的创建是为了解决围绕Internet浮动的较差的加密代码示例数量不断增长。该存储库会随着时间的推移而扩展,以包括更多语言的示例。

截至2021年4月,在5个不同平台上有18种不同的兼容示例,用于15种不同的语言。

算法

  • 加密:AES-128-GCM
  • 键推导:PBKDF2
  • pbkdf2底于哈希:SHA-256

由于Java无限强度政策,因此选择了具有128位密钥的AE,由于密码出口法而需要不超过128位的关键尺寸。虽然使用AES-128显示了示例,但可以通过更改algorithm_key_size(以及某些情况,algorithm_name)参数来琐碎地更改为256位AE。

兼容性

此处显示的每个示例均兼容在平台和/或语言之间。任何语言的加密条件的结果都可以通过任何语言解密。请不要提交拉动请求以获取与现有示例不兼容的示例。

方法

每个示例都以大约等同于以下签名的签名公开4种方法:

  • 字符串EncryptString(明文:字符串,密码:字符串)
  • 字符串decryptstring(ciphertext:字符串,密码:字符串)
  • byte []加密(明文:byte [],键:字节[])
  • byte []解密(ciphertext:byte [],键:字节[])

正如预期的那样,加密和解密方法可在运行并返回原始二进制数据。但是, *字符串方法采用字符串参数并返回基本64编码字符串。首先通过PBKDF2馈送密码参数。密码可以有任何长度,但是密钥必须长度为128位。您可以通过调整algorithm_key_size参数来更改AES密钥大小,在某些示例中,也可以更改algorithm_name参数。

注意:由于使用PBKDF2,二进制与字符串方法兼容。

依赖性

语言 经过测试的版本 依赖性 笔记
爪哇 Java 8 JRE
科特林 Java 8 JRE
JavaScript(节点) Nodejs 8.4.0 在8.4.0上测试,但最早在4.0.0中得到支持
JavaScript(浏览器) 需要base64-js 使用WebCrypto API,请在使用此示例之前确保浏览器支持。
JavaScript(SJCL) 需要Stanford JavaScript加密图书馆 不会异步运行。
走1.9 golang.org/x/crypto/pbkdf2 在1.9上进行了测试,但在早期版本中得到了支持。
Python v3.6.4 需要pycryptodome 不支持Python 2。
红宝石 v2.4.4 使用openssl宝石
Visual Basic .NET .NET 4.5 需要Bouncycastle。
C# .NET 4.5 需要Bouncycastle。
c 需要Openssl libssl-dev 使用scee.h头文件。
C ++ 需要C ++ 11编译器 需要Openssl libssl-dev C示例的包装器。需要scee.h和scee_cpp.h
Objective-C 需要Openssl libssl-dev C示例的包装器。需要scee.h和scee_objc.h
V1.30.0 需要环V0.13.2和Base64 V0.9.3板条箱
迅速 Swift 4.0 需要SwiftGCM。 必须使用桥梁进行COMMONCRYPTO。
php 需要PHP 7 使用需要PHP 7的Random_Bytes。
珀尔 Perl 5 需要加密

测试向量

以下密码是使用给定密码加密标准的结果。如果您的实现可以使用您编写的代码进行加密和解密,并且还可以将下文的密文源分解为相同的给定结果,则适用于此存储库中。回想一下,由于随机生成的盐和nonce,未预期的加密串输出,它们仅用于测试解密。

密文 密码 明文
CQJXSXQ6Y5EBTW6W98UQFGWDOPACCCKCY0L1QK5GJFHZNKVHP4+OUVXOIIGHI8MO1R8CAYL5T DTY62MV2CV XCBJBJD72Q
VTHH3Z6JQJPIDK0YLE4+/umpxqbqbqccmaijwmaecb7qfcyolacvj973zbnm51vcup5utuvlu3h PL4WODJQ4K SOJHSCM4QR
snqhdwnlcmjellkewntxbhzmj1u+chqkk5kdvd/fskssshw5b8y8y8y8sornvhdm78juaypgkleud bzo8pueysy NYZD53 -MOLT
5emcwwsj6ygxblld6dfw8i+qxcwxz5g/laewuyv/duocgvxbw4zlmd1tsj4n07wbbohiju Oziaxpfgyh VW1QJB30MT
7miunuhjjpalbihyka2v/ibh3aplff0pgw6hqad5tkluh/1M69MLQ9XIKVCGFTR0CYCSTFLU gkldy5mmzt 9Z19EFCTOZ
0IQWBC8/1YVTSL2DOG6AXAGFXVYPSV1BCBNDE06C7NL9R9REITN3NW18+ZUMC = 空字符串 空字符串

C示例

C示例需要更多的努力来理解和使用,因为相对于Base64填充的缓冲尺寸变化。下面的示例显示了如何使用crypt_string_get_length来确定需要分配哪个缓冲区以存储结果。

 #include \"SCEE.h\"
#include <stdio.h>

int main ( int argc , char * argv []) {

    // Our plaintext and password.
    unsigned char plaintext [] = \"Hello, World!\" ;
    unsigned char password [] = \"OddShapelyOak7332\" ;

    // Make enough space for our ciphertext.
    // Note that scee_crypt_string_get_length will give us the size of the buffer we
    // need INCLUDING the null character.
    size_t ct_length = scee_crypt_string_get_length ( strlen ( plaintext ), SCEE_CRYPT_ENCRYPT );
    unsigned char ciphertext [ ct_length ];

    // Encryption.
    // The operation places the null character at the end of the buffer for us.
    int r = scee_encrypt_string ( plaintext , strlen ( plaintext ), password , strlen ( password ), ciphertext );
    if ( r != SCEE_OK ) { return 1 ; }

    // Output for Encryption.
    printf ( \"Ciphertext Buffer Size: %zu\\n\" , ct_length );
    printf ( \"Ciphertext strlen     : %zu\\n\" , strlen ( ciphertext ));
    printf ( \"Ciphertext            : %s\\n\\n\" , ciphertext );

    // Make enough space for our plaintext again.
    // Note that because of base64 padding, scee_crypt_string_get_length will
    // usually tell us that we need more space than we do.  We can get the
    // actual length of the plaintext after we decrypt.
    size_t pt_max_length = scee_crypt_string_get_length ( strlen ( ciphertext ), SCEE_CRYPT_DECRYPT );
    size_t pt_actual_length ;
    unsigned char plaintext2 [ pt_max_length ];

    // Decryption.
    // The operation places the null character at the end of the buffer for us.
    r = scee_decrypt_string ( ciphertext , strlen ( ciphertext ), password , strlen ( password ), plaintext2 , & pt_actual_length );
    if ( r != SCEE_OK ) { return 1 ; }

    // Output for Decryption.
    printf ( \"Plaintext Buffer Size: %zu\\n\" , pt_max_length );
    printf ( \"Plaintext Actual Size: %zu\\n\" , pt_actual_length );
    printf ( \"Plaintext strlen     : %zu\\n\" , strlen ( plaintext ));
    printf ( \"Plaintext            : %s\\n\\n\" , plaintext );

    return 0 ;
}

下载源码

通过命令行克隆项目:

git clone https://github.com/luke-park/SecureCompatibleEncryptionExamples.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 SecureCompatibleEncryptionExamples https://www.zuozi.net/34002.html

dify
上一篇: dify
arl
下一篇: arl
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务