Chilkat HOME ASP Visual Basic VB.NET C# Visual C++ C MFC Delphi FoxPro Java Perl PHP Python Ruby SQL Server VBScript
|
Ruby Blowfish CBC Encryption Matching Published Test Vectors Ruby script for Blowfish CBC encryption.
# file: blowfishCBC.rb
require 'chilkat'
# Ruby Blowfish CBC Encryption to match published test vector
# at http://www.schneier.com/code/vectors.txt
# Reproduced here:
# chaining mode test data
# key[16] (0123456789ABCDEFF0E1D2C3B4A59687
# IV [8](FEDCBA9876543210
# data[29] ("7654321 Now is the time for " (includes trailing '\0')
# vdata[29] (37363534333231204E6F77206973207468652074696D6520666F722000
# cipher[32]= 6B77B4D63006DEE605B156E27403979358DEB9E7154616D959F1652BD5FF92CC
crypt = Chilkat::CkCrypt2.new()
crypt.UnlockComponent("anything for 30-day trial")
# Set the CryptAlgorithm to "blowfish2". Chilkat's original implementation
# of Blowfish ("blowfish") did not include CBC and returned encrypted data
# 4321 byte-swapped. For backward compatibility, an additional CryptAlgorithm
# keyword ("blowfish2") was added to indicate the new Blowfish implementation.
crypt.put_CryptAlgorithm("blowfish2")
crypt.put_CipherMode("cbc")
crypt.put_KeyLength(128)
# Padding Schemes:
# 0((RFC2630) Each padding byte is the pad count (16 extra added if size is already a multiple of 16)
# 1(Random bytes except the last is the pad count (16 extra added if size is already multiple of 16)
# 2(Pad with random data. (If already a multiple of 16, no padding is added).
# 3(Pad with NULLs. (If already a multiple of 16, no padding is added).
# 4(Pad with SPACE chars(0x20). (If already a multiple of 16, no padding is added).
# To match the test vector output, we need to pad with NULL bytes.
crypt.put_PaddingScheme(3)
# Set the IV property via an encoded string.
crypt.SetEncodedIV("FEDCBA9876543210", "hex")
# Set the SecretKey property via an encoded string.
crypt.SetEncodedKey("0123456789ABCDEFF0E1D2C3B4A59687", "hex")
# Get the unencrypted data.
unencryptedData = Chilkat::CkByteData.new()
crypt.Decode("37363534333231204E6F77206973207468652074696D6520666F722000", "hex",unencryptedData)
# Now encrypted it using the settings required to match the Blowfish test vector results.
crypt.put_EncodingMode("hex")
encryptedHexString = Chilkat::CkString.new()
crypt.EncryptBytesENC(unencryptedData,encryptedHexString)
# Displays: 6B77B4D63006DEE605B156E27403979358DEB9E7154616D959F1652BD5FF92CC
print encryptedHexString.getString()
|
Need a specific example? Send a request to support@chilkatsoft.com
© 2000-2008 Chilkat Software, Inc. All Rights Reserved.