@24hr/seqcryptor 中文文档教程

发布于 3年前 浏览 23 更新于 3年前

seqCryptor

这是一个使用 seqeuelize 加密特定列的小模块。 它有点像 https://www.npmjs.com/package/sequelize-encrypted 但是因为 seqeuelize-encrypted 还没有更新 五年了,我们需要一个打字稿版本,我们决定创建一个新模块。

它只有 80 多行代码,所以没什么特别的,但我们的目标是创建一个可以在项目中使用的模块 在项目增长很多之后需要加密数据。 所以这是为了尽可能少地改变目标而设计的 sequelize 中的正常模型定义。

目前仅支持DataType.STRINGDataType.JSONBDataType.JSON

How to use it

这是最基本的示例:

// Create the encryptor with your secret key
const encryptor = seqEncryptor('YOUR_SUPER_SECRET_32_BYTES_KEY__');

const sequelize = new Sequelize({
    dialect: 'sqlite',
    storage: ':memory:',
    define: {
        timestamps: true,
    },
    logging: false,
});

class User extends Model {
    public name!: string;
    public guid!: string;
}

User.init({
    guid: {
        allowNull: false,
        unique: true,
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
    },
    name: encryptor({               // THIS IS THE ONLY DIFFERENCE. Together with the field below.
        type: DataTypes.STRING,
        field: 'name',              // THIS IS REQUIRED. The initiation functions doens't have access to the name in the json,
                                    // so we need to explicitly write it.
    }),
}, {
    sequelize,
    paranoid: false,
});

await User.sync();

const user = await User.create({ name: 'bar' });

const rawUser = await User.findOne({ where: { guid: user.guid }, raw: true });
console.log(rawUser.name); // Will print an encrypted string

const loadedUser = await User.findOne({ where: { guid: user.guid } });
console.log(loadedUser.name); // Will print "bar"

How to test it

要运行测试,请运行:

npm ci
npm run test-ci

seqCryptor

This is a small module to encrypt specififc columns with seqeuelize. It's a little like https://www.npmjs.com/package/sequelize-encrypted but since seqeuelize-encrypted hasnt been updated for five years and we needed a typescript version, we deciced to create a new module.

It's just 80+ rows of code, so nothing fancy, but our goals was to create a module that we could use in procjects that need to encrypt data AFTER the project had grown a lot. So this is designed with the goal of chaning as little as possbile to the normal model definition in sequelize.

It currently only supports DataType.STRING, DataType.JSONB and DataType.JSON.

How to use it

This is the most basic example:

// Create the encryptor with your secret key
const encryptor = seqEncryptor('YOUR_SUPER_SECRET_32_BYTES_KEY__');

const sequelize = new Sequelize({
    dialect: 'sqlite',
    storage: ':memory:',
    define: {
        timestamps: true,
    },
    logging: false,
});

class User extends Model {
    public name!: string;
    public guid!: string;
}

User.init({
    guid: {
        allowNull: false,
        unique: true,
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
    },
    name: encryptor({               // THIS IS THE ONLY DIFFERENCE. Together with the field below.
        type: DataTypes.STRING,
        field: 'name',              // THIS IS REQUIRED. The initiation functions doens't have access to the name in the json,
                                    // so we need to explicitly write it.
    }),
}, {
    sequelize,
    paranoid: false,
});

await User.sync();

const user = await User.create({ name: 'bar' });

const rawUser = await User.findOne({ where: { guid: user.guid }, raw: true });
console.log(rawUser.name); // Will print an encrypted string

const loadedUser = await User.findOne({ where: { guid: user.guid } });
console.log(loadedUser.name); // Will print "bar"

How to test it

To run the tests, run:

npm ci
npm run test-ci
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文